我需要用列表初始化2d數組。
例如2X3陣列:[[0,0,0], [0,0,0]]
在Python中初始化2d列表提供了值之間的鏈接(相同地址)
首先嚐試:
In: a1 = [[0]*3]*2
In: a1[0][0] = 100
In: a1
Out: [[100,0,0], [100,0,0]]
這很奇怪。所以我檢查:
In: a1 = [[0]*3]*2
In: id(a1[0][0])
Out: 4518461984
In: id(a1[1][0])
Out: 4518461984
相同的地址。
第二次嘗試:
In: a2 =[[0]*3 for i in range(2)]
In: a2[0][0] = 100
In: a2
Out: [[100, 0, 0], [0, 0, 0]]
權。
讓我再次檢查存儲器地址:
In: a2 =[[0]*3 for i in range(2)]
In: id(a2[0][0])
Out: 4518461984
In: id(a2[1][0])
Out: 4518461984
好了,奇怪。同樣的地址了。我預計不同的地址。我最初的猜測是返回的地址是指向值的指針地址。那我該如何檢索插槽的地址?
有沒有人可以解釋導致此行爲的Python的工作原理?在Python中,我認爲很難知道哪個是指針,哪個是價值。
我讀過它,但它有所不同,因爲它是根據使用*或範圍生成副本的時候。 –
@Coldspeed的評論解決了我的問題。 '作爲補充說明,請注意,如果使用帶有可變結構的*,那些引用也會被重用。 - Coldspeed' –