python基础学习笔记——深浅拷贝
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
lst1 = [ "⾦⽑狮王" , "紫衫⻰王" , "⽩眉鹰王" , "⻘翼蝠王" ] lst2 = lst1 print (lst1) print (lst2) lst1.append( "杨逍" ) print (lst1) print (lst2) 结果: [ '⾦⽑狮王' , '紫衫⻰王' , '⽩眉鹰王' , '⻘翼蝠王' , '杨逍' ] [ '⾦⽑狮王' , '紫衫⻰王' , '⽩眉鹰王' , '⻘翼蝠王' , '杨逍' ] dic1 = { "id" : 123 , "name" : "谢逊" } dic2 = dic1 print (dic1) print (dic2) dic1[ 'name' ] = "范瑶" print (dic1) print (dic2) 结果: { 'id' : 123 , 'name' : '谢逊' } { 'id' : 123 , 'name' : '谢逊' } { 'id' : 123 , 'name' : '范瑶' } { 'id' : 123 , 'name' : '范瑶' } |
对于list, set, dict来说, 直接赋值. 其实是把内存地址交给变量. 并不是复制⼀份内容. 所以. lst1的内存指向和lst2是⼀样的. lst1改变了, lst2也发⽣了改变
浅拷⻉
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
lst1 = [ "何炅" , "杜海涛" , "周渝⺠" ] lst2 = lst1.copy() lst1.append( "李嘉诚" ) print (lst1) print (lst2) print ( id (lst1), id (lst2)) 结果: 两个lst完全不⼀样. 内存地址和内容也不⼀样. 发现实现了内存的拷⻉ lst1 = [ "何炅" , "杜海涛" , "周渝⺠" , [ "麻花藤" , "⻢芸" , "周笔畅" ]] lst2 = lst1.copy() lst1[ 3 ].append( "⽆敌是多磨寂寞" ) print (lst1) print (lst2) print ( id (lst1[ 3 ]), id (lst2[ 3 ])) 结果: [ '何炅' , '杜海涛' , '周渝⺠' , [ '麻花藤' , '⻢芸' , '周笔畅' , '⽆敌是多磨寂寞' ]] [ '何炅' , '杜海涛' , '周渝⺠' , [ '麻花藤' , '⻢芸' , '周笔畅' , '⽆敌是多磨寂寞' ]] 4417248328 4417248328 |
浅拷⻉. 只会拷⻉第⼀层. 第⼆层的内容不会拷⻉. 所以被称为浅拷⻉
深拷⻉
1
2
3
4
5
6
7
8
9
10
11
|
import copy lst1 = [ "何炅" , "杜海涛" , "周渝⺠" , [ "麻花藤" , "⻢芸" , "周笔畅" ]] lst2 = copy.deepcopy(lst1) lst1[ 3 ].append( "⽆敌是多磨寂寞" ) print (lst1) print (lst2) print ( id (lst1[ 3 ]), id (lst2[ 3 ])) 结果: [ '何炅' , '杜海涛' , '周渝⺠' , [ '麻花藤' , '⻢芸' , '周笔畅' , '⽆敌是多磨寂寞' ]] [ '何炅' , '杜海涛' , '周渝⺠' , [ '麻花藤' , '⻢芸' , '周笔畅' ]] 4447221448 4447233800 |
都不⼀样了.
深度拷贝. 把元素内部的元素完全进行拷贝复制. 不会产⽣⼀个改变另⼀个跟着 改变的问题 补充⼀个知识点:
最后我们来看⼀个⾯试题:
1
2
3
|
a = [ 1 , 2 ] a[ 1 ] = a print (a[ 1 ])
|
python基础学习笔记——深浅拷贝的更多相关文章
- 0003.5-20180422-自动化第四章-python基础学习笔记--脚本
0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...
- python 基础学习笔记(1)
声明: 本人是在校学生,自学python,也是刚刚开始学习,写博客纯属为了让自己整理知识点和关键内容,当然也希望可以通过我都博客来提醒一些零基础学习python的人们.若有什么不对,请大家及时指出, ...
- Python 基础学习笔记(超详细版)
1.变量 python中变量很简单,不需要指定数据类型,直接使用等号定义就好.python变量里面存的是内存地址,也就是这个值存在内存里面的哪个地方,如果再把这个变量赋值给另一个变量,新的变量通过之前 ...
- Python基础入门知识点——深浅拷贝
深浅拷贝 对象引用.浅拷贝.深拷贝(拓展.难点.重点) Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果 其实这个是由于共享内存导致的结果 拷贝 ...
- Python基础学习笔记(十三)异常
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-exceptions.html Python用异常对象(excep ...
- Python基础学习笔记(十二)文件I/O
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-files-io.html ▶ 键盘输入 注意raw_input函 ...
- Python基础学习笔记(十一)函数、模块与包
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-functions.html 3. http://www.liao ...
- Python基础学习笔记(十)日期Calendar和时间Timer
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-date-time.html 3. http://www.liao ...
- Python基础学习笔记(九)常用数据类型转换函数
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-variable-types.html 3. http://www ...
随机推荐
- [异常]undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1:0x16529f8 @example=nil>
在进行Rspec 编译测试: bundle exec rspec spec/requests/static_pages_spec.rb 提示错误: FF Failures: 1) Static pag ...
- oracle 直接连接到数据库 CMD窗口
打开cmd 在命令行 中输入如下命令 sqlplus sys/zd****!@60.**.203/orcl as sysdba 就直接连上了
- Negut 上传乱码
解决办法 修改 bat 文件的 格式为ANSI格式即可
- .NET Core 1.0 CentOS7 尝试(一、安装)
昨天宣布 ASP.NET Core RC2,据说差不多稳定了,以后不会有大改了. 参考:https://blogs.msdn.microsoft.com/webdev/2016/05/16/annou ...
- volatile双重锁实现单例
双重锁实现单例时遭到质疑,既是:双重锁也无法保证单例模式! 原因是:指令会重排序,普通的变量仅仅会保证该方法在执行时,所有依赖的赋值结果是正确的,但不会保证执行顺序! 为什么会重排序:指令重排序是指c ...
- Json的详细用法
参考博客:https://www.cnblogs.com/haiyan123/p/7829080.html 1.json(Javascript Obiect Notation,JS对象标记)是一种 ...
- input禁止显示用户输入历史记录
input标签中加上属性autocomplete="off"
- Android 两个ArrayList找出相同元素及单个ArrayList删除元素
//从一个ArrayList中删除重复元素 List<String> arrayList1 = new ArrayList<String>(); arrayList1.add( ...
- Codeforces Round #316 (Div. 2) D Tree Requests
官方题解是离线询问,dfs树形转线性,然后二分找区间. 还有一种比较好的做法是直接dfs,将当前访问这个结点u相关的询问之前的状态存起来,然后访问完以后利用异或开关性,得到这颗子树上的答案. 代码是学 ...
- ping 不通。无法访问目标主机
台式机 使用无线网卡 又登录了VPN 有时候访问不了局域网内的主机 解决方案 添加路由即可 window+R 打开运行 输入cmd 然后输入 route add 10.16.1.89 10.13 ...