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 ...