可选参数保持指向相同的值

时间:2013-01-04 19:21:19

标签: python

  

可能重复:
  “Least Astonishment” in Python: The Mutable Default Argument

我试图编写一个在Python 2.7.3中随机化列表的函数。执行此操作的代码是:

import random

def randomize_list(l, new=[]):
    if not len(l):
        return new

    print id(l), id(new)

    l1 = list(l)

    new.append(l1.pop(
        random.choice(list(range(len(l1))))
    ))

    return randomize_list(l1, new)

如果我导入此函数并多次调用它,id(new)始终返回相同的值,并且对randomize_function的每次后续调用都会将项添加到上一次调用的结果中。所以,例如:

>>> a = [1,2,3,4]
>>> randomize_list(a)
35192344 35234016
16126176 35234016
16126536 35234016
16126896 35234016
[2,3,4,1]
>>> randomize_list(a)
35192344 35234016
35193488 35234016
35193344 35234016
16126608 35234016
[2,3,4,1,3,2,1,4]
... and so on

为什么会发生这种情况,我该如何解决?

0 个答案:

没有答案