我想要反转一个列表,我设法这样做,但在工作的中间我发现了一些奇怪的东西。以下程序按预期工作,但不显示行 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])
答案 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)
list
和reversed_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[:]