4 回答

TA貢獻2051條經驗 獲得超10個贊
a=[['']*2]*2
上面可以分解為:
a = ['']*2 #result: a = ['', ''] --> it copies value of '' since '' is a string
a = [a]*2 #result: a = [a,a] --> which means it copies the reference of a instead of its value since a is a list.
a[0][1]='previous' # result: [['', 'previous'], ['', 'previous']]

TA貢獻2037條經驗 獲得超6個贊
好吧,我們假設 a == b。將列表乘以(情況 a)2 創建深度復制,即共享內存地址。手動構建列表(情況 b)可以避免此問題。因此,當您訪問和更新 a 中的元素時,您實際上是在更新兩個內部列表:
a = [['']*2]*2
b = [['', ''], ['', '']]
print(a == b) # True
print(a)
a[0][1] = 'previous'
print(a)
print(id(a[0]) == id(a[1])) # True, same memory address
print(b)
b[0][1] = 'previous'
print(b)
print(id(b[0]) == id(b[1])) # False, different memory addresses

TA貢獻2039條經驗 獲得超8個贊
使用 a=[''*2] 你會得到 [''] 因為空字符串 * 2 = 空字符串
使用 a=['']*2 你會得到 ['','']
使用 a=[['']*2] 你會得到 [['','']]
使用 a=[['']*2]*2 你會得到 [['', ''], ['', '']] 類似于步驟 2
你使用的是 a=[['']*2]*2 --> [['', ''], ['', '']] 你應該使用的是 a = [[[''] ]*2]*2 --> [[[''], ['']], [[''], ['']]]

TA貢獻1830條經驗 獲得超3個贊
a = [['']*2]*2
print (a[0][1] is a[1][1]) # true
所以當你聲明一個數組時,數組中的元素應該是不同的引用對象。
添加回答
舉報