Python 之 深淺拷貝
阿新 • • 發佈:2018-12-22
Python 深淺拷貝
在瞭解Python的深淺拷貝之前,需要先了解一下Python記憶體中變數的儲存情況。
對於Python而言,Python的一切變數都是物件,變數的儲存採用了引用的方式,儲存的只是變數的值的記憶體地址,而不是變數值本身。
- 變數賦值
#變數賦值,儲存的記憶體地址相同 並沒有開闢新的記憶體只是增加了引用,所以當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]
- 淺拷貝
#淺拷貝,變數儲存的記憶體地址不一樣,但是內部列表元素的記憶體地址一樣,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]]
- 深拷貝
#深拷貝,變數儲存的記憶體地址不一樣,包括內部列表元素,兩者互不影響 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]]