「入場から実際の戦闘までのPython3」を参照
1つの浅いコピー
浅いコピーは、Webページファイルのコピーに似ています。新しいWebページファイルと元のWebページファイルは2つの異なるオブジェクトですが、内容は同じです。
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
'''