我认为它应该包含每个"追加"的不同列表。但事实并非如此

时间:2015-08-21 13:29:47

标签: python list python-2.7

运行这段代码后,它总会返回一个包含完全相同的较小列表的列表......

import time
from random import randint

t = [0,0]
a = []

def rec():
    a.append(t)

for i in range(10):
    t[0] = randint(10,20)
    t[1] = randint(40,500)
    rec()
    time.sleep(.0001)

print a

我得到这样的输出,为什么?

[[17, 134], [17, 134], [17, 134], [17, 134], [17, 134], [17, 134], [17, 134], [17, 134], [17, 134], [17, 134]]

2 个答案:

答案 0 :(得分:2)

欢迎来到可变与不可变类型的古怪世界!

缺点是Python列表中的列表是可变的,这意味着对列表的引用实际上会改变原始列表!您必须通过t = [randint(10,20), randint(40,500)]创建新列表。这应该可以帮到你:)

有关可变与不可变类型的更多信息,请参阅this SO Q/A

我还建议不要使用像rec这样的功能。当你不需要全局变量时,尽量避免使用全局变量(它们使调试变得比它需要的更困难)。为什么不直接传入参数?或者只使用append内联!

答案 1 :(得分:0)

如何使用list comprehensions - [[randint(10,20), randint(40,500)] for i in range(10)]