python 二維列表淺拷貝現象
阿新 • • 發佈:2018-12-10
建立一個二維列表有一個快捷方法就是使用*。
# 建立一個寬度為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]]
這樣後面的沒有跟著變了。