Python 如何将用户类对象添加到对象列表中
我试图将对象附加到对象列表中,但对象类的所有属性都与最后一个条目相同 我发现在for循环中声明对象可以解决问题,但不明白为什么。。。 (似乎列表中的所有对象都指向同一个对象) 首先,我宣布: 这项工作: 这不起作用(“simplelist[].name”中的所有值都等于3)-为什么?Python 如何将用户类对象添加到对象列表中,python,Python,我试图将对象附加到对象列表中,但对象类的所有属性都与最后一个条目相同 我发现在for循环中声明对象可以解决问题,但不明白为什么。。。 (似乎列表中的所有对象都指向同一个对象) 首先,我宣布: 这项工作: 这不起作用(“simplelist[].name”中的所有值都等于3)-为什么? x=SimpleClass()创建(类似于此类型的对象) 如果在循环外运行它,则正好有一个对象并尝试更改它simplelist.append(x)在这种情况下,会将这个唯一的对象附加到列表中(并且每次都会更改),因
x=SimpleClass()
创建(类似于此类型的对象)
如果在循环外运行它,则正好有一个对象并尝试更改它simplelist.append(x)
在这种情况下,会将这个唯一的对象附加到列表中(并且每次都会更改),因此您将拥有一个包含一个对象的多个副本的列表
如果在循环中运行它,则会有几个不同的对象实例化一个类simplelist.append(x)
在本例中,会将每个新对象追加到列表中,这样您就有了一个包含许多不同对象的列表
从官方Python文档:
类实例化使用函数表示法。假设class对象是一个无参数函数,它返回类的一个新实例。例如(假设上述类别):
x=MyClass()
创建类的新实例,并将此对象指定给局部变量x
实例化操作(“调用”类对象)创建一个空对象。许多类喜欢创建对象,并根据特定的初始状态自定义实例
在第二种情况下,只创建类的一个对象。然后更改此对象,并以此更改列表中对象的所有现有副本。这是因为您只创建了一个对象,并将其添加到列表中4次。所有对象(因此是相同的4倍)将具有与name相同的值,这将是3,因为这是您在
循环中所做的最后一次修改 在您的例子中,x
是SimpleClass
类的一个实例。实际上,它是一个引用/指针,在for
循环中不会更改。您只需更改SimpleClass
类的name
属性的值。因此,您的列表将包含相同的引用3次。因为您使用的是相同的对象。在for循环中移动x的初始化。在最近的编辑中,您甚至可以回答自己的问题。那么,你的问题到底是什么呢?这么看,.append()并没有创建一个对象并复制到它,它只是链接我创建的列表对象?
class SimpleClass:
name = ""
simplelist = []
for count in range(4):
x = SimpleClass()
x.name = count
simplelist.append(x)
x = SimpleClass()
for count in range(4):
x.name = count
simplelist.append(x)