Python中出现意外的列表行为

时间:2014-02-03 20:29:22

标签: python list behavior

我想要反转一个列表,我设法这样做,但在工作的中间我发现了一些奇怪的东西。以下程序按预期工作,但不显示行 list_reversed [i] = list [len(list)-1-i] print(list [i])(评论最后一行当然)会导致列表发生变化。我没看到什么?我的Python版本是3.3.3。提前谢谢。

list=[1,2,3,4,5,6]

list_reversed=list

for i in range(0,len(list)):

    #list_reversed[i]=list[len(list)-1-i]
    #print(list[i])

    print(list[len(list)-1-i])

5 个答案:

答案 0 :(得分:5)

以下内容:

list_reversed = list 

使两个变量引用相同的列表。当你改变一个时,它们都会改变。

要制作副本,请使用

list_reversed = list[:]

更好的是,使用内置函数而不是编写自己的函数:

list_reversed = reversed(list)

P.S。我建议不要使用list作为变量名称,因为它会隐藏the builtin

答案 1 :(得分:1)

当你这样做时:

list_reversed = list

您不创建list的副本,而是创建一个新名称(变量),该名称引用您之前使用的相同列表。你可以通过添加:

来看到这一点
print(id(list_reversed), id(list))  # Notice, the same value!!

答案 2 :(得分:0)

list_reversed = list不会复制列表。它只是使list_reversed指向同一列表的新名称。您可以在本网站上看到有关此问题的任何其他问题,在右侧相关问题中列出一些问题。

答案 3 :(得分:0)

listreversed_list是相同的列表。因此,改变另一个也会改变另一个。

你应该做的是:

reversed_list = list[::-1]

这样就可以一举反转并复制清单。

答案 4 :(得分:0)

这是关于python中列表的一般行为。这样做的:

list_reversed = list

不会复制列表,而是复制它。你可以运行:

print(id(list_reversed))
print(id(list))

两者输出相同,意味着它们是同一个对象。您可以通过以下方式复制列表:

a = [1,2]
b = a.copy()

a = [1,2]
b = a[:]