天天看點

python淺拷貝和深拷貝 copy()和deepcopy()

問題

L1 = [, , , [, ]]
L2 = L1

L2[] = 

print(L1)
print(L2)
"""
>>>[233, 2, 3, [4, 5]]
>>>[233, 2, 3, [4, 5]]
# 因為L1和L2的引用都相同,指向了同一個list對象
"""
           

使用copy()函數

import copy

L1 = [, , , [, ]]
L2 = copy.copy(L1)

L2[] = 
print(L1)
print(L2)
"""
>>>[1, 2, 3, [4, 5]]
>>>[2333, 2, 3, [4, 5]]
# 淺拷貝,這時L1和L2已經是兩個不相同的對象了,
# 是以L2[0]改變沒有影響到L1
"""

L2[][] = 
print(L1)
print(L2)
"""
>>>[1, 2, 3, [2333, 5]]
>>>[2333, 2, 3, [2333, 5]]
# 注意到,當改變了L2内嵌的list時,L1的也随之改變了
# 這時因為L1和L2指向的是同一個内嵌的list(淺拷貝)
# 如果學過c++這點很好了解,相當于對象之間指派時,淺拷貝,指針指向了同一塊記憶體
"""
           

使用deepcopy()解決以上問題

import copy

L1 = [, , , [, ]]
L2 = copy.deepcopy(L1)

L2[] = 
L2[][] = 

print(L1)
print(L2)

"""
>>>[1, 2, 3, [4, 5]]
>>>[2333, 2, 3, [2333, 5]]
"""