【python】copy和賦值

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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容