簡體   English   中英

理解對象列表的 Python 內存分配的問題

[英]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()實例都共享相同的list1list2屬性,因為它們是在類聲明中聲明的。

您應該在__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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM