python中的深拷贝和浅拷贝
2018-02-26 22:03
113 查看
python中的深拷贝和浅拷贝
浅拷贝意即只拷贝引用,仍然指向同一个内存地址,修改其中任何一个都会使所有的引用改变注意: 和java不同的地方在于python中的'=='比较的是内容,is 比较的内存地址,而java中 '==' 比较的是内存地址,equls则比较内容
a = [1,2,3] b = a print(a == b) # True print(a is b) # True a[0] = 4 print(a,'<==>',b) # [4,2,3]==[4,2,3] print(id(a),'<==>',id(b)) # 内存地址相同
深拷贝则相反,如果要拷贝的对象有引用其他对象,不论深浅层次全部递归拷贝至新的对象(意即拷贝内容至新的内存地址当中, 即使被拷贝对象是元组类型),新旧之间相对独立,此时修改被拷贝对象不会影响深拷贝之后的内容
import copy a = [1,2,3] b = [4,5,6] c = [a,b] e = copy.deepcopy(c) print(c == e) # True print(c is e) # False print(id(e),'<==>',id(c)) # 内存地址不相同
另外还有copy方法,只会拷贝第一层内容,第二层及以下仍保持引用,
注意,如果是元组等不可变类型,则会直接使用软拷贝方式
a = [1,2,3] b = [4,5,6] c = [a,b] e = (a,b) f = copy.copy(c) g = copy.copy(e) print(f is c ) # False print(id(f),'<==>',id(c)) # 不相同 print(g is e) # True print(id(g),'<==>',id(e)) # 相同 a[0] = 7 print(f) # [[7,2,3][4,5,6]] print(g) # [[7,2,3][4,5,6]]
相关文章推荐
- Python 深拷贝、浅拷贝
- Python中的深浅拷贝
- python 深浅拷贝 进阶
- python 引用和拷贝、重复
- Python之深拷贝和浅拷贝
- python开发_copy(浅拷贝|深拷贝)_博主推荐
- 一入python深似海--浅拷贝与深拷贝
- 用python实现的可以拷贝或剪切一个文件列表中的所有文件
- 【Python】Python 直接赋值、浅拷贝和深度拷贝解析
- 图解 Python 深拷贝和浅拷贝
- python的赋值、浅拷贝和深拷贝
- 【python】通过paramiko远程拷贝文件
- python的复制,深拷贝和浅拷贝
- Python的浅拷贝和深拷贝
- Python之深浅拷贝
- 图解 Python 深拷贝和浅拷贝
- 图解 Python 深拷贝和浅拷贝
- Python对象拷贝——深拷贝与浅拷贝
- python 列表浅拷贝和深拷贝
- 深入理解 python 中的赋值、引用、拷贝、作用域