淺copy深copyd的區別

2022-06-05 09:54:13 字數 1757 閱讀 7833

list1=[

'egon',

'lxx',

[1,2]

]# 1、二者分隔不開,list改list2也跟著該,因為指向的就是同乙個位址

# list2=list1 # 這不叫copy

# list1[0]='egon'

# print(list2)

# 2、需求:

# 1、拷貝一下原列表產生乙個新的列表

# 2、想讓兩個列表完全獨立開,並且針對的是改操作的獨立而不是讀操作

# 3、如何copy列表

# 3.1 淺copy:是把原列表第一層的記憶體位址不加區分完全copy乙份給新列表

list1=[

'egon',

'lxx',

[1,2]

]list3=list1.copy()

# print(list3)

# print(id(list1))

# print(id(list3))

# print(id(list1[0]),id(list1[1]),id(list1[2]))

# print(id(list3[0]),id(list3[1]),id(list3[2]))

# 實驗1:對於不可變型別的賦值,都是產生了新值,讓原列表的索引指向新的

# 記憶體位址,並不會影響新列表

list1[0]='egon'

list1[1]='lxx'

# list1[2]=123

# 實驗2:但對於可變型別,我們可以改變可變型別中包含的值,但記憶體位址不變

# 即原列表的索引指向仍然指向原來的記憶體位址,於是新列表也跟著一起受

# 影響,如下

# list1[2][0]=111

# list1[2][1]=222

# print(list1)

# print(list3)

# 綜合實驗1和實驗2可以得出,要想copy得到的新列表與原列表的改操作完全獨立開

# 必須有一種可以區分開可變型別與不可變型別的copy機制,這就是深copy

#---------------------------

# 3.2 深copy

import copy

list1=[

'egon',

'lxx',

[1,2]

]list3=copy.deepcopy(list1)

# print(id(list1))

# print(id(list3))

# print(list3)

# 不可變 不可變 可變

# print(id(list1[0]),id(list1[1]),id(list1[2]))

# print(id(list3[0]),id(list3[1]),id(list3[2]))

'''4497919088 4498367856 4498449216

4497919088 4498367856 4498595328

'''# print(list3)

# print(id(list1[2][0]),id(list1[2][1]))

# print(id(list3[2][0]),id(list3[2][1]))

list1[0]='egon'

list1[1]='lxx'

list1[2][0]=111

list1[2][1]=222

# print(list1)

print(list3)

關於python深copy與淺copy的一點理解

一直對python深copy和淺copy似懂非懂的狀態,看了這篇文章,覺得自己懂了很多,給各位參考!出處 import copy a 1 不可變資料型別 copy a copy.copy a print id a id copy a 記憶體位址相同 a 1,2 可變資料型別 copy a copy....

Python列表賦值 淺copy 深copy的區別

1.python中列表的賦值操作 賦值操作在其他語言裡也很常見,例 name1 centos 123123,fedora freebsd uos deepin flag name2 name1 這是python中列表的賦值方式,經過列印後列表name2和列表name1是一樣的 centos 1231...

python 引用,淺copy和深拷貝

l 1,2,3,4 g l g 1 3 上面這個方法是引用複製,因為g和l是同乙個東東,輸出結果是 g 1,2,3,3 l 1,2,3,3 如果想複製所有的生成乙個新的list,那麼使用下面的方法 g data for data in l 這樣就全部的值都copy 過來 現在你再g 1 5,g和l ...