我想填充每個對象的字典,每個對象都有一個字符串列表,全部來自給定的字符串列表。問題是,當我想替換字典的單個元素時,每個元素都會改變。在Python中替換單個元素元素
Person類:
class Person:
messages = []
def __init__(self, p):
self.name = p
def add_message(self, m_text):
self.messages.append(m_text)
主要代碼:
chat_messages_list = ["Eva: Eva's first text", "Eva: Eva's second text", "Eva: Eva's third text",
"Harry: Harry's first text", "Harry: Harry's second text", "Harry: Harry's third text",
"Ellis: Ellis' first text", "Ellis: Ellis' second text", "Ellis: Ellis' third text"]
dict_persons = {}
for element in chat_messages_list:
split_messages = element.split(": ")
name = split_messages[0]
message_text = split_messages[1]
# Create Person in list if not already exists
if name not in dict_persons:
dict_persons[name] = Person(name)
person = dict_persons[name]
# THE PROBLEM: Following line will add message_text to EVERY Person in dict_persons
person.add_message(message_text)
for key, value in dict_persons.items():
print("{0}: {1}".format(key, value.messages))
預期結果:
Eva: ["Eva's first text", "Eva's second text", "Eva's third text"]
Harry: ["Harry's first text", "Harry's second text", "Harry's third text"]
Ellis: ["Ellis' first text", "Ellis' second text", "Ellis' third text"]
實際結果:
Eva: ["Eva's first text", "Eva's second text", "Eva's third text", "Harry's first text", "Harry's second text", "Harry's third text", "Ellis' first text", "Ellis' second text", "Ellis' third text"]
Ellis: ["Eva's first text", "Eva's second text", "Eva's third text", "Harry's first text", "Harry's second text", "Harry's third text", "Ellis' first text", "Ellis' second text", "Ellis' third text"]
Harry: ["Eva's first text", "Eva's second text", "Eva's third text", "Harry's first text", "Harry's second text", "Harry's third text", "Ellis' first text", "Ellis' second text", "Ellis' third text"]
Wy是字符串被添加到字典中的所有對象,而不是隻是所需的一個?
是的,當然,因爲你是*附加到同一個列表*,也就是說,你添加到你在類中定義的列表中作爲'messages = []',這是一個* class級別屬性*共享通過*所有實例*。 –