當我們在使用List 時,很有可能會出現其它需求要使用
例如:
a = [1,2,3]
你可能會認為我就很簡單的
b = a 賦值就好了
但是事實上,在Python中,我們這樣子做,並不會真正在創建一個B出來
而是a和b同時都指向[1,2,3],這就好像[1,2,3],這個東西同時有a和b這兩個名字。
a = [1,2,3]
b = a
print(a) # 兩者輸出是相同的
print(b) # 都是[1,2,3]
a.append(4) # 當我們對a進行修改後
print(a) # 你可以看到兩者的內容仍然是相同的
print(b) # 說明兩者之間確實只是 List [1,2,3]叫不同的名字而已
b = a
print(a) # 兩者輸出是相同的
print(b) # 都是[1,2,3]
a.append(4) # 當我們對a進行修改後
print(a) # 你可以看到兩者的內容仍然是相同的
print(b) # 說明兩者之間確實只是 List [1,2,3]叫不同的名字而已
我們看看執行結果
[1, 2, 3]
[1, 2, 3]
[1, 2, 3, 4]
[1, 2, 3, 4]
那我們要怎麼避免這樣子指向同一物件的的情況呢?
import copy
a = [1,2,3]
aa = copy.deepcopy(a)
ab = copy.copy(a)
print(a)# [1, 2, 3]
a = [1,2,3]
aa = copy.deepcopy(a)
ab = copy.copy(a)
print(a)# [1, 2, 3]
print(aa)# [1, 2, 3]
print(ab)# [1, 2, 3]
# 一開始的值都是一樣的
a[1] = 99
print(a)#[1, 99, 3]
# 一開始的值都是一樣的
a[1] = 99
print(a)#[1, 99, 3]
print(aa)#[1, 2, 3]
print(ab)#[1, 2, 3]
但是實際上真的是這樣嗎? 我們明天再說