shallow copy 和 deep copy
【引用】https://blog.csdn.net/u010712012/article/details/79754132
- 对于简单的 object,用 shallow copy 和 deep copy 没区别
- 复杂的 object, 如 list 中套着 list 的情况
- shallow copy 中的 子list,并未从原 object 真的「独立」出来
- 也就是说,如果你改变原 object 的子 list 中的一个元素,你的 copy 就会跟着一起变。
-
copy.deepcopy()
和.copy()
是一样的
import copy
x = [1,[10]]
y = copy.copy(x) # 尽管内存地址变了,但浅层copy无法让子list真正独立
z = copy.deepcopy(x) # z = x.copy()
y[1][0] = 250
print('x',x)
print('y',y)
print('z',z)
print(id(x))
print(id(y))
print(id(z))
>>>
x [1, [250]]
y [1, [250]]
z [1, [10]]
2232827410688
2232822278912
2232817470848
赋值
当value是整体改变的时候(list/数值),内存地址也会发生改变。不同的值存放在不同的内存地址里。
当list是部分改变,内存地址还是原来的地址,值也跟着改变
- 当value是整体改变的时候(list/数值),内存地址也会发生改变。不同的值存放在不同的内存地址里。
a = 1 # *
b = a
print(id(a))
print(id(b))
a = 3 # ***
print(a)
print(b)
print(id(a))
print(id(b))
>>>
140707619157792 # *
140707619157792
3
1
140707619157856 # ***
140707619157792
a = [1,2,3] # *
b = a
print(id(a))
print(id(b))
a = [1] # ***
print(a)
print(b)
print(id(a))
print(id(b))
>>>
2232832929728 # *
2232832929728
[1, 2]
[1, 2, 3]
2232832046656 # ***
2232832929728
- 当list是部分改变,内存地址还是原来的地址,值也跟着改变
a = [1,1]
b = a
print(id(a))
print(id(b))
a[1] = 2 # ***
print(a)
print(b)
print(id(a))
print(id(b))
>>>
2232834388992
2232834388992
[1, 2]
[1, 2]
2232834388992
2232834388992
网友评论