Method将变量返回到其原始参数变量中

时间:2011-01-17 21:25:38

标签: python

我遇到了我的程序问题,其中一个方法正在保存它对其中使用的参数变量所做的一切。

这是一个示例:通过给定空格将列表元素向左移动的方法。

def moveLeft (perm, pos, spaces):
   permTemp = perm
   for n in range(spaces):
      charMoved = permTemp[pos-n]
      permTemp [pos-n] = permTemp[pos-n-1]
      permTemp[pos-n-1] = charMoved
   return permTemp

permO = [0,1,2,3] #original perm  
print moveLeft(permO, -1, 2)
print moveLeft(permO, -1, 2)
print permO

期望输出将是:前两个是相同的(因为它打印方法的相同返回值),最后一个输出是原始列表([0,1,2,3])。 相反,我得到:

    >>> 
[0, 3, 1, 2]
[0, 2, 3, 1]
[0, 2, 3, 1]

2 个答案:

答案 0 :(得分:2)

使用

permTemp = perm[:]

实际复制列表,而不是仅仅为同一个对象分配新名称。

Python赋值不会创建新对象,只会命名现有对象。这就是你要修改原始列表的原因。

答案 1 :(得分:1)

使用Sven的列表副本,但请注意您不需要时间变量来交换值:

def moveLeft(perm, pos, spaces):
   permTemp = perm[:]
   for n in range(spaces):
      permTemp[pos-n], permTemp[pos-n-1] = permTemp[pos-n-1], permTemp[pos-n]
   return permTemp