【发布时间】:2013-12-23 07:55:45
【问题描述】:
假设我们有一个Foo 类,我们想实例化一个foos 的列表,我们可以这样做:
foo_list = [Foo()] * 3
现在如果我们使用foo_list[0].x = 5 会怎样?此语句会将属性x 设置为列表中的所有实例!!!
当我发现这个时,它让我大吃一惊。问题是,当我们创建这样的列表时,显然 python 将首先创建 Foo 实例,然后是列表实例,然后将相同的对象附加到它 3 次,但我真的希望它做这样的事情:
foo_list = [Foo() for i in range(3)]
你不也是吗?好吧,现在我知道了,这个语法糖肯定不能用我想用的,但是,它是干什么用的呢?我唯一能想到的就是创建一个初始大小如下的列表:list = [None] * 5,这对我来说在 python 的情况下没有多大意义。
这种语法还有其他真正有用的用例吗?
【问题讨论】:
-
在使用不可变对象时,重用对象可以节省大量内存。
-
我想我会提到这个小宝石,当您获得副本或参考资料时,它非常便于可视化:python visualizer。
标签: python python-2.7