运行这段代码后,它总会返回一个包含完全相同的较小列表的列表......
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]]
答案 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)]
?