[英]Problem in understanding Python memory allocation for list of objects
我想在不同對象的屬性中存儲不同的值。 但是在下面的程序中,對一個對象的類變量所做的更改也會影響其他對象。 似乎所有對象都引用同一個類變量(內存位置)? (它不應該是)但輸出告訴...
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
屬性,因為它們是在類聲明中聲明的。
您應該在__init__
方法中創建新的。
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())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.