shallow copy 和 deep copy
【引用】https://blog.csdn.net/u010712012/article/details/79754132
- 對于簡單的 object,用 shallow copy 和 deep copy 沒區(qū)別
- 復雜的 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/數(shù)值),內存地址也會發(fā)生改變。不同的值存放在不同的內存地址里。
當list是部分改變,內存地址還是原來的地址,值也跟著改變
- 當value是整體改變的時候(list/數(shù)值),內存地址也會發(fā)生改變。不同的值存放在不同的內存地址里。
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