参考了《Python3从入门到实战》
一、浅拷贝
浅拷贝类似复制一个网页文件,产生新的网页文件和原来的网页文件是两个不同的对象,但他们的内容是网去哪一样的
import copy
a = ['hello',[2,3,4]]#如果a是一个简单的值,a 和 b是一样的
b = copy.copy(a)
print(a)
print(b)
print(a is b)
print(id(a))
print(id(b))
#尽管a,b是不同的对象,但是两个对象对应元素的值是一样的,引用的是同一个对象.
print(id(a[0]))
print(id(b[0]))
a[1] = 'xusong'
print(b[1])#这样看起来好像并不会修改b
'''
['hello', [2, 3, 4]]
['hello', [2, 3, 4]]
False
2776165785024#内存地址有可能不同,但是应该符合规则
2776165775296
2776165704944
2776165704944
[2, 3, 4]
'''
二、深拷贝
深拷贝:和浅拷贝不同,深拷贝会对这个对象的嵌套对象进行复制(拷贝),并且对嵌套对象的嵌套对象进行拷贝(浅拷贝只对最外层的对象包含的元素值进行拷贝)
a = ['hello',3,[3,5,6]]
b = a.copy()
a[2][1] = 9
print(b[2][1])#这样就可以修改,虽然他们的id还是不一样的(因为引用不同)
print(id(a))
print(id(b))
print(id(a[0]))
print(id(b[0]))
'''
运行结果如下:
9
2776165806336
2776182493248
2776165704944
2776165704944
'''
a = ['hello',3,[3,5,6]]
b = a#这里直接改成=
a[2][1] = 9
print(b[2][1])#现在我们发现,他们连所有的内存地址都一样了
print(id(a))
print(id(b))
print(id(a[0]))
print(id(b[0]))
'''
运行结果如下:
9
2776165883328
2776165883328
2776165704944
2776165704944
'''