1. 程式人生 > >Python 之 深淺拷貝

Python 之 深淺拷貝

Python 深淺拷貝

在瞭解Python的深淺拷貝之前,需要先了解一下Python記憶體中變數的儲存情況。
對於Python而言,Python的一切變數都是物件,變數的儲存採用了引用的方式,儲存的只是變數的值的記憶體地址,而不是變數值本身。

  1. 變數賦值
#變數賦值,儲存的記憶體地址相同  並沒有開闢新的記憶體只是增加了引用,所以當a改變時b也改變
a = [1,2,3,[4,5]]
b = a
print(id(a),id(b))
>>>2526202389064 2526202389064
a.append(6)
print(a,b)
>>>[1,2,3,[4,5],6]   [1,2,3,[4,5],6] 
  1. 淺拷貝
#淺拷貝,變數儲存的記憶體地址不一樣,但是內部列表元素的記憶體地址一樣,a發生改變時b也改變
import copy
a = [1,2,3,[4,5]]
b = copy.copy(a)
print(id(a),id(b))
>>>2853069611592 2853118604488
a.append(6)
a[3].append(6)
print(id(a[3]),id(b[3]))
>>>2853069611528 2853069611528
print(a,b)
>>>[1, 2, 3, [4, 5,6],6]  [1, 2, 3, [4, 5,6]]
  1. 深拷貝
#深拷貝,變數儲存的記憶體地址不一樣,包括內部列表元素,兩者互不影響
import copy
a = [1,2,3,[4,5]]
b = copy.deepcopy(a)
print(id(a),id(b))
>>>2912169517640 2912190002056
a.append(6)
a[3].append(6)
print(id(a[3]),id(b[3]))
>>>2912169517576 2912170752968
print(a,b)
>>>[1, 2, 3, [4, 5, 6], 6] [1, 2, 3, [4, 5]]