python 二維列表淺拷貝現象

2021-08-28 06:14:23 字數 956 閱讀 9294

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

# 建立乙個寬度為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—>nshallow copiesof list concatenated, n個list的淺拷貝的連線。

如:

list2d=*3

print(list2d)

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]]

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

參考

python二維列表

class vector2 向量 def init self,x 0,y 0 self.x x self.y y 將函式轉移到類中,就是靜態方法 staticmethod 向右取值 defright return vector2 0,1 向上取值 staticmethod defup return ...

二維列表的建立,以及深拷貝和淺拷貝的運用

淺拷貝有兩種方式 1 等於符號用於拷貝是淺拷貝,是將原來的列表完全拷貝下來,並且當原來列表發生改變時,拷貝下來的也會發生改變 a 1 2,1,2 b a 這裡將a拷貝給b12 輸出結果為 1 2,1,2 12 1,2,1,2 12 可見淺拷貝的話是隨著原列表的而改變而改變2 copy的拷貝方法,拷貝...

python二維列表排序

假設有乙個學生列表儲存了學號,姓名,年齡資訊 students 3,jack 12 2,rose 13 1,tom 10 5,sam 12 4,joy 8 按學號順序排序 sorted students,key lambda x x 0 1,tom 10 2,rose 13 3,jack 12 4,...