示例说明了一切:
x = [set()]*5
x[0].add(1)
print x
的产率:
[set([1]), set([1]), set([1]), set([1]), set([1])]
我明白发生了什么,但这是预期的吗?我是否真的需要使用循环来初始化具有彼此不是别名的空集的列表?
答案 0 :(得分:1)
我明白发生了什么事,但这是预料到的吗?
Python中需要此行为。在此上下文中使用*
运算符可创建对set()
个对象的引用,这意味着当您更改一个此类对象时(就像使用add()
一样),您可以更改 all 对该对象的引用。
我是否真的需要使用循环来初始化一个列表,这些列表的空集不是彼此的别名?
是;这是创建单独引用的对象的正确方法。