首先建立一個列表函數
a=[[1,2,3],4,5,6]spa
1、賦值內存
a=[[1,2,3],4,5,6]
b=a
a[0][1]='tom'
print(a)
print(b)
結果:
[[1, 'tom', 3], 4, 5, 6]
[[1, 'tom', 3], 4, 5, 6]import
a=[[1,2,3],4,5,6]
b=a
b[0][1]='tom'
print(a)
print(b)
結果:
[[1, 'tom', 3], 4, 5, 6]
[[1, 'tom', 3], 4, 5, 6]
總結:賦值無論是對a列表改變仍是對b列表改變,
只要改變其中一個,另外一個也會跟着變,這是由於a
和b共用一塊內存,沒有建立新的內存,
他們是相同的,他們指向同一個內存區域。
2、淺拷貝 [:]or copy()
a=[[1,2,3],4,5,6]
b=a.copy()
b[0][1]='tom'
print(a)
print(b)
結果:
[[1, 'tom', 3], 4, 5, 6]
[[1, 'tom', 3], 4, 5, 6]im
a=[[1,2,3],4,5,6]
b=a.copy()
a[0][1]='tom'
print(a)
print(b)
結果:
[[1, 'tom', 3], 4, 5, 6]
[[1, 'tom', 3], 4, 5, 6]
a=[[1,2,3],4,5,6]
b=a.copy()
b[1]='tom'
print(a)
print(b)
結果:
[[1, 2, 3], 4, 5, 6]
[[1, 2, 3], 'tom', 5, 6]總結
a=[[1,2,3],4,5,6]
b=a.copy()
a[1]='tom'
print(a)
print(b)
結果:
[[1, 2, 3], 'tom', 5, 6]
[[1, 2, 3], 4, 5, 6]數據
總結:從上面代碼能夠看出來淺拷貝是從新開闢一塊內存,拷貝第一層數據,不拷貝內部子元素集合
在本代碼中,b列表從新開闢了一塊內存放元素【b【0】,4,5,6】,也就是第一層內容,copy
而後b【0】的位置指向了a【0】指向的內存位置co
3、深拷貝 使用copy函數
從新開闢一塊內存,存放拷貝列表的全部內容。a集合與b集合互不影響
import copy
a=[[1,2,3],4,5,6]
b=copy.deepcopy(a)
a[1]='tom'
print(a)
print(b)
結果:
[[1, 2, 3], 'tom', 5, 6]
[[1, 2, 3], 4, 5, 6]
import copy
a=[[1,2,3],4,5,6]
b=copy.deepcopy(a)
b[1]='tom'
print(a)
print(b)
結果:
[[1, 2, 3], 4, 5, 6]
[[1, 2, 3], 'tom', 5, 6]
import copy
a=[[1,2,3],4,5,6]
b=copy.deepcopy(a)
b[0][1]='tom'
print(a)
print(b)
結果;
[[1, 2, 3], 4, 5, 6]
[[1, 'tom', 3], 4, 5, 6]
import copy
a=[[1,2,3],4,5,6]
b=copy.deepcopy(a)
a[0][1]='tom'
print(a)
print(b)
結果:
[[1, 'tom', 3], 4, 5, 6]
[[1, 2, 3], 4, 5, 6]
copy函數也能夠淺拷貝:
import copy
a=[[1,2,3],4,5,6]
b=copy.copy(a)
a[0][1]='tom'
print(a)
print(b)
結果:
[[1, 'tom', 3], 4, 5, 6]
[[1, 'tom', 3], 4, 5, 6]