Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的意外列表行为 我想翻转一个清单,我设法做到了,但在工作的中间,我发现了一些奇怪的东西。以下程序按预期工作,但取消行list\u 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])_Python_List_Behavior - Fatal编程技术网

Python中的意外列表行为 我想翻转一个清单,我设法做到了,但在工作的中间,我发现了一些奇怪的东西。以下程序按预期工作,但取消行list\u 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])

Python中的意外列表行为 我想翻转一个清单,我设法做到了,但在工作的中间,我发现了一些奇怪的东西。以下程序按预期工作,但取消行list\u 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]),python,list,behavior,Python,List,Behavior,当您这样做时: list_reversed = list 您不会创建列表的副本,而是创建一个新名称(变量),该名称引用了您以前拥有的相同列表。您可以通过添加以下内容看到这一点: print(id(list_reversed), id(list)) # Notice, the same value!! 以下是: list_reversed = list 使两个变量引用相同的列表。当你改变一个,他们都改变 要复制,请使用 list_reversed = list[:] 更好的方法是使用内

当您这样做时:

list_reversed = list
您不会创建
列表的副本,而是创建一个新名称(变量),该名称引用了您以前拥有的相同列表。您可以通过添加以下内容看到这一点:

print(id(list_reversed), id(list))  # Notice, the same value!!
以下是:

list_reversed = list 
使两个变量引用相同的列表。当你改变一个,他们都改变

要复制,请使用

list_reversed = list[:]
更好的方法是使用内置函数,而不是编写自己的函数:

list_reversed = reversed(list)

另外,我建议不要使用
list
作为变量名,因为它会产生阴影。

list\u reversed=list
不会复制列表。它只会使
list\u反转
一个指向同一列表的新名称。你可以在这个网站上看到很多关于这个问题的其他问题,一些问题列在右边的相关问题中。

list
reversed\u list
是同一个列表。因此,改变一个也会改变另一个

你应该做的是:

reversed_list = list[::-1]

这将一次性反转和复制列表。

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

list_reversed = list
不复制列表,而是复制对它的引用。您可以运行:

print(id(list_reversed))
print(id(list))
两者的输出相同,这意味着它们是相同的对象。您可以通过以下方式复制列表:

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


检查
list
实例没有
copy
方法(但是
dict
实例有)好吧,这不是比一切都好吗。(我为这一变化游说了一段时间)。我用python3.2进行了测试,但它不起作用。然而,python3.4则是另一回事。我手边没有python3.3,所以我无法测试它。我在ArchLinux上有3.3.3。无论如何,谢谢你的提示。这可能会给我带来一些麻烦。啊,我不知道发生了什么,现在一切都有意义了,谢谢你提供了复制列表的解决方案。我在学习如何反转列表时发现了内置函数,但这更像是一个练习,感谢您指出这一点。关于不使用list作为变量名的好建议,我已经有一段时间没有编写Python了,但现在我记得读过这方面的内容。
a = [1,2]
b = a[:]