Tôi đã xác định một lớp Listener
và đã tạo một từ điển gồm Listener
đối tượng. Mỗi người nghe có một số id
để xác định họ và danh sách artists
họ nghe, artists = []
. Thêm một cái gì đó vào danh sách artists
thêm nó cho tất cả các trường hợp của lớp Listener
, thay vì trường hợp được giới thiệu. Đây là vấn đề của tôi.Danh sách là thành viên của lớp python, tại sao nội dung của nó được chia sẻ trên tất cả các phiên bản của lớp?
Lớp Listener được định nghĩa như sau:
class Listener:
id = ""
artists = []
def __init__(self, id):
self.id = id
def addArtist(self, artist, plays):
print self.id # debugging...
print "pre: ", self.artists
self.artists.append(artist)
print "post: ", self.artists
Đây là mã của tôi gỡ lỗi thử nghiệm:
def debug():
listeners = {}
listeners["0"] = Listener("0")
listeners["1"] = Listener("1")
listeners["0"].addArtist("The Beatles", 10)
listeners["0"].addArtist("Lady Gaga", 4)
listeners["1"].addArtist("Ace of Base", 5)
Và kết quả:
0
pre: []
post: ['The Beatles']
0
pre: ['The Beatles']
post: ['The Beatles', 'Lady Gaga']
1
pre: ['The Beatles', 'Lady Gaga']
post: ['The Beatles', 'Lady Gaga', 'Ace of Base']
kết quả mong muốn của tôi là cuộc gọi cuối cùng addArtist("Ace of Base", 5)
sẽ dẫn đến kết quả là
1
pre: []
post: ['Ace of Base']
Đây có phải là sự tinh tế của Python mà tôi không hiểu không? Tại sao đây là đầu ra và làm thế nào tôi có thể nhận được đầu ra mong muốn thay vào đó? Cảm ơn!