Python copy 拷貝模組

2022-02-20 11:52:43 字數 2168 閱讀 5709

目錄內建模組 copy

# 注意:由於拷貝對於不可變物件等同於賦值操作,所以你會發現列表中的不可變元素無論深淺拷貝位址指向不變

# 淺拷貝-方式一: [:]

>>> l1 = [['5', '2', '1'], ['1', '3', '1', '4']]

>>> id(l1)

4401079144

>>> map(id, l1)

[4401099336, 4401100056]

>>> l2 = l1[:]

>>> id(l2)

4401085328

>>> map(id, l2)

[4401099336, 4401100056]

# 淺拷貝方式二: copy.copy(x)

>>> import copy

>>> l1 = [['5', '2', '1'], ['1', '3', '1', '4']]

>>> id(l1)

4401085040

>>> map(id, l1)

[4401079144, 4401083672]

>>> l2 = copy.copy(l1)

>>> id(l2)

4402468120

>>> map(id, l2)

[4401079144, 4401083672]

# 深拷貝方式一: copy.deepcopy(x, memo=none, _nil=)

>>> import copy

>>> l1 = [['5', '2', '1'], ['1', '3', '1', '4']]

>>> id(l1)

4402559960

>>> map(id, l1)

[4402560248, 4401062328]

>>> l2 = copy.deepcopy(l1)

>>> id(l2)

4401072536

>>> map(id, l2)

[4401100344, 4401101136]

>>> import copy

>>> a = '123'

>>> y = copy.copy(a) # 淺拷貝

>>> id(a)

4322676048

>>> id(y)

4322676048

>>> y = copy.deepcopy(a) # 深拷貝,和淺拷貝效果一樣

>>> id(y)

4322676048

>>> l = ['1','2','3']

>>> x = copy.copy(l)

>>> id(l)

4322239336

>>> id(x)

4322239120

>>> id(l[0])

4320359368

>>> id(x[0])

4320359368

>>> x = copy.deepcopy(l)

>>> id(x)

4322237544

>>> id(l)

4322239336

>>> id(x[0])

4320359368

>>> id(l[0])

4320359368

當列表中存在可變物件時,深拷貝後,可變物件位址會被改變

>>> l = ['1','2','3',['1','2']]

>>> x = copy.deepcopy(l)

>>> id(x)

4322239336

>>> id(l)

4322213040

>>> id(x[0]) # 可變物件元素相同

4320359368

>>> id(l[0])

4320359368

>>> id(x[-1]) # 這是乙個可變元素

4322213688

>>> id(l[-1])

4322239120

>>> x = copy.copy(l) # 淺拷貝,位址都相同

>>> id(l[-1])

4322239120

>>> id(x[-1])

4322239120

python copy模組 待優化的功能

deep2type是乙個字典,point dict deep2type之後,如果修改point dict,也會對deep2type造成影響,請問如何解決 可以通過深度複製的方法,把源資料複製,得到乙個新的資料物件,操作新資料物件不會影響到源資料,詳情如下 import copy point dict...

python copy模組中的函式例項用法

1 copy.copy 函式可用於複製列表或字典等可變值,複製後的列表和原列表是兩個獨立的列表。import copy origin 1,2,3 new copy.copy origin new 0 0 print origin origin print new new 2 www.cppcns.c...

Python copy複製 賦值 深度賦值

a b正常賦值是索引同乙個記憶體位址,實際上,賦值是引用,引用了這個位址。實質上,a 就是b 了,對於a的任何操作都會作用到b 上 b copy.copy a 是淺複製,對於第一層是不同的記憶體位址,對於第二層是相同的記憶體位址 eg a 1,2,3,4 b copy.copy a 其中,a 3 和...