【发布时间】:2014-11-30 04:08:15
【问题描述】:
作为编程的初学者,我试图用 Python 做这个和那个。我想要一个简单的函数,它接受一个列表作为它的参数,并返回另一个列表,它只是原始列表旋转一次(所以 rotate([1, 2, 3]) 将返回 [2, 3, 1] ),同时保持原始列表不变。
我知道这个
def rotate(list):
list.append(list[0])
list.remove(list[0])
将更改列表(并返回无)。
但是这个
def rotate_2(list):
temp = list
temp.append(temp[0])
temp.remove(temp[0])
return temp
还会更改原位列表(同时返回所需列表)。
第三个
def rotate_3(list):
temp = [x for x in list]
temp.append(temp[0])
temp.remove(temp[0])
return temp
给出所需的结果,即返回一个新列表,同时保持原始列表不变。
我无法理解 rotate_2 的行为。当函数只是在 temp 上做某事时,为什么要更改 list ?它给我一种感觉,好像 list 和 temp 被 temp = list “链接”了。还有为什么rotate_3 ok?对不起,如果我的英语很奇怪,那不是我的第一语言(不像 Python)。
【问题讨论】:
-
因为
temp = list不创建副本,不像rotate_3中的列表理解。
标签: python