Python 3.x 在Python中将list插入list时为什么要使用list()方法

Python 3.x 在Python中将list插入list时为什么要使用list()方法,python-3.x,Python 3.x,所以我想使用 coords = [110,50] pos = [[100,50],[90,50],[80,50]] pos.insert(0,coords) 当在for循环中使用时,它没有像我想象的那样工作,但我找到了解决方案: pos.insert(0,list(coords)) 现在,这将在我的pos列表的开头插入coords,但我想知道,当coords本身已经是一个列表时,为什么我必须使用list()方法。这是一个完整的示例代码: coords = [100,50] pos1 = [[

所以我想使用

coords = [110,50]
pos = [[100,50],[90,50],[80,50]]
pos.insert(0,coords)
当在for循环中使用时,它没有像我想象的那样工作,但我找到了解决方案:

pos.insert(0,list(coords))
现在,这将在我的pos列表的开头插入coords,但我想知道,当coords本身已经是一个列表时,为什么我必须使用list()方法。这是一个完整的示例代码:

coords = [100,50]
pos1 = [[100,50],[90,50],[80,50]]
pos2 = [[100,50],[90,50],[80,50]]
for i in range(5):
    print(i+1)
    coords[0] += 10

    pos1.insert(0,coords)
    print ('Pos1: ',pos1)

    pos2.insert(0,list(coords))
    print ('Pos2: ',pos2)
正如在输出中可以注意到的,pos1pos2列表是完全不同的

1
Pos1:  [[110, 50], [100, 50], [90, 50], [80, 50]]
Pos2:  [[110, 50], [100, 50], [90, 50], [80, 50]]
2
Pos1:  [[120, 50], [120, 50], [100, 50], [90, 50], [80, 50]]
Pos2:  [[120, 50], [110, 50], [100, 50], [90, 50], [80, 50]]
3
Pos1:  [[130, 50], [130, 50], [130, 50], [100, 50], [90, 50], [80, 50]]
Pos2:  [[130, 50], [120, 50], [110, 50], [100, 50], [90, 50], [80, 50]]
4
Pos1:  [[140, 50], [140, 50], [140, 50], [140, 50], [100, 50], [90, 50], [80, 50]]
Pos2:  [[140, 50], [130, 50], [120, 50], [110, 50], [100, 50], [90, 50], [80, 50]]
5
Pos1:  [[150, 50], [150, 50], [150, 50], [150, 50], [150, 50], [100, 50], [90, 50], [80, 50]]
Pos2:  [[150, 50], [140, 50], [130, 50], [120, 50], [110, 50], [100, 50], [90, 50], [80, 50]]

任何人都可以解释一下插入coords列表(coords)时有什么区别吗?

插入coords效果很好,但每次都插入相同的列表对象。因此,您的循环只是向同一个列表添加了许多引用,当您执行
coords[0]+=10
时,该列表会发生更改,并且您可以在pos1中看到到处都反映的更改

使用
list(coords)
对coords进行复制,因此它是一个包含相同值的新列表,更改原始列表不会更改副本


coords[:]
也是制作列表副本的常用方法。

插入coords效果很好,但每次都插入相同的列表对象。因此,您的循环只是向同一个列表添加了许多引用,当您执行
coords[0]+=10
时,该列表会发生更改,并且您可以在pos1中看到到处都反映的更改

使用
list(coords)
对coords进行复制,因此它是一个包含相同值的新列表,更改原始列表不会更改副本


coords[:]
也是制作列表副本的常用方法。

非常感谢您的回答!我想不出来,但现在有道理了。非常感谢你的回答!我想不出来,但现在它说得通了。