您的位置:首页 > 编程语言 > Python开发

Python之深拷贝和浅拷贝

2017-12-14 15:00 127 查看
**# 浅拷贝:python所执行的复制动作中,如果是基本类型的数据(数字,字符串),就在内存中重新见一个窝,如果不是基本数据类型(列表,元祖,字典),就不用重新建窝即可,而是标签引用原来的窝。

# .copy()则是浅拷贝

# 深拷贝:所执行的复制的动作中,无论是基本数据类型,还是复杂数据类型 都会建一个窝来存储复制“对象的内容*

# = 复制
x = {"name":"qiswe","lang":["python","java","c"]}
y = x
#id(x) = 66983424
#id(y) = 66983424
#x和y对象所引用是一个对象 所谓的假拷贝

# 浅拷贝 .copy()函数 复制
x = {"name":"qiswe","lang":["python","java","c"]}
y = x.copy()
#id(x) = 67022784
#id(y) = 72002800
# 这次得到y与原来的x是不同的,他在内存中开辟了一个空间。
y["name"] = "qisse"
print(y)
{'name': 'qisse', 'lang': ['python', 'java', 'c']}
id(y["name"])
72008736
print(x)
{'name': 'qiswe', 'lang': ['python', 'java', 'c']}
id(x["name"])
72010016
# y进行的修改不会对x有影响
# 注:
y["lang"].append("c++")
print(y)
{'name': 'qisse', 'lang': ['python', 'java', 'c', 'c++']}
print(x)
{'name': 'qiswe', 'lang': ['python', 'java', 'c', 'c++']}
#修改y对象列表时会对x造成影响 ,修改字符串时不会对x产生影响
#原因是浅拷贝是:浅拷贝 python所执行的复制动作中,如果是基本类型的数据(数字,字符串),就在内存中重新建一个窝,如果不是基本数据类型(列表,元祖,字典),就不用重新建窝即可,而是标签引用原来的窝。
!浅拷贝分析图](http://img.blog.csdn.net/20171214145259526?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd3N4aWFvZmVpb28=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
深拷贝: 深拷贝 所执行的复制的动作中,无论是基本数据类型,还是复杂数据类型 都会新建一个窝来存储复制对象的内容
import copy
x = {"name":"qiswe","lang":["python","java","c"]}
y = copy.deepcopy(x)
y["lang"].append("c++")
print(y)
{'name': 'qiswe', 'lang': ['python', 'java', 'c', 'c++']}
print(x)
{'name': 'qiswe', 'lang': ['python', 'java', 'c']}
# y的修改不会对x造成修改
这是所谓的浅拷贝和深拷贝的区别

欢迎大家指出错误!!!!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: