Python的深拷贝与浅拷贝

先谈浅拷贝:

浅拷贝拷贝的是地址引用,可以找到共同的内容,原文件内容修改,拷贝的那份也会修改。

例子:

a = [1,2,3]

b = a

print(id(a))

print(id(b)--------他们两个的地址是相同的,内容也是一样的

a.append(4)

print(a)

print(b)-------a添加了4,b也会跟着变化。

再谈深拷贝:

深拷贝的内容一样,但是地址不一样,就算是一方文件修改,另外一方不会变化。

b  = copy.deepcopy(a)

b得到的内容与a的内容完全是一样的,但是地址不会一样,就算是a中有对象引用,b中对应的引用的对象依然是内容一样,地址不一样

import copy

a = [1,2,3,4]

b = copy.deepcopy(a)

print(id(a))

print(id(b))

a.append(5)

print(a)

print(b)

注意:如果是一个不可变的对象(内部存储还是不可变对象),那时候就是浅拷贝,得到的地址也是一样的

a = (1,2,3,4)

b = copy.deepcopy(a)

print(id(a))

print(id(b))

print(a)

print(b)

copy.copy()这个函数结果会因为是可变的或则是不可变的而导致结果不同  只能拷贝一层。根据类型有关。若果是列表,就是深拷贝,若果是元组,就是浅拷贝,如果是有嵌套,浅拷贝。

可变的时候是深拷贝:

a = [1,2,3,4]

b = copy.copy(a)

print(id(a))

print(id(b))

a.append(5)

print(a)

print(b)

不可变的时候是浅拷贝:

a = (1,2,3,4)

b = copy.copy(a)

print(id(a))

print(id(b))

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Python中的拷贝分为两种,浅拷贝与深拷贝 浅拷贝:浅拷贝是对于一个对象的顶层拷贝。通俗的理解是:拷贝了引用,并...
    qtruip阅读 259评论 0 0
  • 一. 'is' '==' 总结 ·is是比较两个引用是否指向了同一个对象(地址引用比较)。 ·==是比较两个对象是...
    __Python__阅读 693评论 0 2
  • http://python.jobbole.com/85231/ 关于专业技能写完项目接着写写一名3年工作经验的J...
    燕京博士阅读 7,638评论 1 118
  • 望心镜阅读 292评论 0 1
  • 仙逝(一) 作者妙手书生 题记:母亲于公元2017年5月1日下午5点58分驾鹤西去 天上下雨 人在流泪
    0967655c090d阅读 509评论 1 4