1. 程式人生 > >python 二維列表淺拷貝現象

python 二維列表淺拷貝現象

建立一個二維列表有一個快捷方法就是使用*。

# 建立一個寬度為3,高度為4的二維列表
myList=[[0]*3]*4
print(myList)
myList[0][1]=1
print(myList)

執行結果為:

[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
[[0, 1, 0], [0, 1, 0], [0, 1, 0], [0, 1, 0]]

這裡我們看見操作二維列表的時候,操作的是myList[0][1]=1,但是其他的也跟著變成了1。

list * n—>n shallow copies of list concatenated, n個list的淺拷貝的連線。

如:

list2d=[[]]*3
print(list2d)
list2d[0].append(3)
print(list2d)

結果為:

[[], [], []]
[[3], [3], [3]]

為了避免這種情況,可以使用二維列表推導式:

myList=[( [0]*3) for i in range(4)]

mylist1=[([0]*3) for i in range(4)]
print(mylist1)
mylist1[0][1]=2
print(mylist1)

執行後為:

[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
[[0, 2, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]

這樣後面的沒有跟著變了。