1. 程式人生 > 實用技巧 >python--深淺拷貝理解

python--深淺拷貝理解

# 淺拷貝(copy):拷貝父物件,不會拷貝物件的內部的子物件。
# 深拷貝(deepcopy): copy 模組的 deepcopy 方法,完全拷貝了父物件及其子物件
#list2=list1 -->這個不叫拷貝

list1 =[1,2,[11,22,33],{"a":1,"b":2}]
list2=list1.copy()
print(id(list1[0]),id(list1[1]),id(list1[2]),id(list1[3]))
print(id(list2[0]),id(list2[1]),id(list2[2]),id(list2[3]))
print(id(list1))
print(id(list2)) list1[0]=11 list1[1]=22 list1[2][0]=44 list1[3]["a"]=3 print(list1) print(list2) print(id(list1[0]),id(list1[1]),id(list1[2]),id(list1[3])) print(id(list2[0]),id(list2[1]),id(list2[2]),id(list2[3]))
/usr/local/bin/python3.8 "/Users/futantan/PycharmProjects/S14/day 7 /copy.py"
4475763344 4475763376 4479800448 4478424320
4475763344 4475763376 4479800448 4478424320
4479802816
4479799616
[
11, 22, [44, 22, 33], {'a': 3, 'b': 2}] [1, 2, [44, 22, 33], {'a': 3, 'b': 2}] 4475763664 4475764016 4479800448 4478424320 4475763344 4475763376 4479800448 4478424320 Process finished with exit code 0
#如上所看,改變了list 中的可變型別(int float等,list1 list1變成了修改後的,list2不變)
#改變了list1 的不可變型別,則id 不變(記憶體地址不變)值發生了改變,列表和字典本身沒有發生改變

#可變可不變型別
#可變型別:值改變,id不變,
#不可變型別,值改變,id也改變了,證明是產生了新的值,壓根沒有改變原址,證明原值是不可以被改變的。

# 2驗證
# int 是不可變型別
# x=10
# print (id(x))
# x=11
# print (id(x))

#2.2 float 也是不可變
# x=10.1
# print (id(x))
# x=11.2
# print (id(x))

# #2.2 str 也是不可變
# x="abc"
# print (id(x))
# x="ert"
# print (id(x))
"""小結:int float str 都是被設計成不可分割的整體,不能被改變"""

深拷貝
import copy
list1 =[1,2,[11,22,33],{"a":1,"b":2}]
list3=copy.deepcopy(list1)
print(list1)
print(list3)
print(id(list1[0]),id(list1[1]),id(list1[2]),id(list1[3]))
print(id(list3[0]),id(list3[1]),id(list3[2]),id(list3[3]))
list1[0]=11
list1[1]=22
list1[2][0]=44
list1[3]["a"]=3
print(list1)
print(list3)
print(id(list1[0]),id(list1[1]),id(list1[2]),id(list1[3]))
print(id(list3[0]),id(list3[1]),id(list3[2]),id(list3[3]))
/usr/local/bin/python3.8 "/Users/futantan/PycharmProjects/S14/day 7 /深淺拷貝.py"
[1, 2, [11, 22, 33], {'a': 1, 'b': 2}]
[1, 2, [11, 22, 33], {'a': 1, 'b': 2}]
4478016144 4478016176 4482064448 4480681216
4478016144 4478016176 4482058112 4480729472
[11, 22, [44, 22, 33], {'a': 3, 'b': 2}]
[1, 2, [11, 22, 33], {'a': 1, 'b': 2}]
4478016464 4478016816 4482064448 4480681216
4478016144 4478016176 4482058112 4480729472

Process finished with exit code 0