Python3.5(十)深淺拷貝問題
阿新 • • 發佈:2017-08-30
第一個 com 發生 字典 創建 pytho 有變 占用 ron
【可變對象-不可變對象】
在Python中不可變對象指:一旦創建就不可修改的對象,包括字符串,元祖,數字
在Python中可變對象是指:可以修改的對象,包括:列表、字典
>>> L1 = [2,3,4] #L1變量指向的是一個可變對象:列表 >>> L2 = L1 #將L1值賦給L2後,兩者共享引用同一個列表對象[1,2,3,4] >>> L1[0] = 200 #因為列表可變,改變L1中第一個元素的值 >>> L1; L2 #改變後,L1,L2同時改變,因為對象本身值變了[200, 3, 4] [200, 3, 4]
如果不想改變列表L2的值,有兩種方法:切片 和 copy模塊
>>> L1 = [2,3,4] >>> L2 = L1 >>> id(L1);id(L2) #共享引用一個可變對象 45811784L 45811784L >>> L2 = L1[:] #切片操作 >>> id(L1);id(L2) #切片後,對象就不一樣了 45811784L 45806920L >>> L1[0] = 200 >>> L1;L2 #L1發生改變,L2沒有變化 [200, 3, 4] [2, 3, 4]
【拷貝】
1. 切片技術應用於所有的序列,包括:列表、字符串、元祖
但切片不能應用於字典。對字典只能使用D.copy()方法或D.deepcopy()方法.
2. 深淺拷貝,即可用於序列,也可用於字典
>>> import copy
>>> X = copy.copy(Y) #淺拷貝:只拷貝頂級的對象,或者說:父級對象
>>> X = copy.deepcopy(Y) #深拷貝:拷貝所有對象,頂級對象及其嵌套對象。或者說:父級對象及其子對象
如果字典只有頂級對象
- 如果字典中嵌套對象:
D和C1變,C2不變
【結論】
- 深淺拷貝都是對源對象的復制,占用不同的內存空間
- 如果源對象只有一級目錄的話,源做任何改動,不影響深淺拷貝對象
- 如果源對象不止一級目錄的話,源做任何改動,都要影響淺拷貝,但不影響深拷貝
- 序列對象的切片其實是淺拷貝,即只拷貝頂級的對象
轉載http://blog.csdn.net/jerry_1126/article/details/41852591
Python3.5(十)深淺拷貝問題