理解对象列表的Python内存分配时出现问题
我想在不同对象的属性中存储不同的值。但在下面的程序中,对一个对象的类变量所做的更改也会影响其他对象。似乎所有对象都引用同一个类变量(内存位置)?(不应该是)但是输出告诉我们理解对象列表的Python内存分配时出现问题,python,list,class,object,memory-management,Python,List,Class,Object,Memory Management,我想在不同对象的属性中存储不同的值。但在下面的程序中,对一个对象的类变量所做的更改也会影响其他对象。似乎所有对象都引用同一个类变量(内存位置)?(不应该是)但是输出告诉我们 class abc: list1=[] list2=[1,2,3,4,5,6,7,8,9,10] def disp_obj(self): print("List1=",self.list1,"List2=",self.list2) def change(self):
class abc:
list1=[]
list2=[1,2,3,4,5,6,7,8,9,10]
def disp_obj(self):
print("List1=",self.list1,"List2=",self.list2)
def change(self):
self.list1.append(self.list2.pop())
xyz=[]
for i in [1,2,3,4]:
xyz.append(abc())
for i in [0,1,2,3]:
xyz[i].change()
xyz[i].disp_obj()
输出:
List1= [10] List2= [1, 2, 3, 4, 5, 6, 7, 8, 9]
List1= [10, 9] List2= [1, 2, 3, 4, 5, 6, 7, 8]
List1= [10, 9, 8] List2= [1, 2, 3, 4, 5, 6, 7]
List1= [10, 9, 8, 7] List2= [1, 2, 3, 4, 5, 6]
但我的预期产出是:
List1= [10] List2= [1, 2, 3, 4, 5, 6, 7, 8, 9]
List1= [10] List2= [1, 2, 3, 4, 5, 6, 7, 8, 9]
List1= [10] List2= [1, 2, 3, 4, 5, 6, 7, 8, 9]
List1= [10] List2= [1, 2, 3, 4, 5, 6, 7, 8, 9]
所有abc()
实例都共享相同的list1
和list2
属性,因为它们在类声明中声明
您应该在\uuuu init\uuuu
方法中创建新的
class abc:
def __init__(self):
self.list1=[]
self.list2=[1,2,3,4,5,6,7,8,9,10]
def disp_obj(self):
print("List1=",self.list1,"List2=",self.list2)
def change(self):
self.list1.append(self.list2.pop())