我遇到了一些我認爲不是很困難的問題,但是我找不到任何答案。Python:複製兩個依賴列表以及它們的依賴關係
我有兩個對象列表,每個對象列表都包含另一個對象列表。我想複製它們,以便在重複此過程之前進行來檢測並評估結果。最後,我會保持最好的結果。
但是,當複製每個列表時,結果不是兩個依賴列表,而是兩個不再相互作用的列表。我該如何解決這個問題?有一些正確的方法來做到這一點嗎?
給定兩個類定義如下。
import copy
class event:
def __init__(self, name):
self.name = name
self.list_of_persons = []
def invite_someone(self, person):
self.list_of_persons.append(person)
person.list_of_events.append(self)
class person:
def __init__(self, name):
self.name = name
self.list_of_events = []
我試圖寫一些我正面臨的情況的簡單例子。打印功能顯示兩個列表中的對象標識符不同。
# Create lists of the events and the persons
the_events = [event("a"), event("b")]
the_persons = [person("x"), person("y"), person("z")]
# Add some persons at the events
the_events[0].invite_someone(the_persons[0])
the_events[0].invite_someone(the_persons[1])
the_events[1].invite_someone(the_persons[1])
the_events[1].invite_someone(the_persons[2])
print("Original :", id(the_persons[1]), id(the_events[0].list_of_persons[1]), id(the_events[1].list_of_persons[0]))
# Save the original configuration
original_of_the_events = copy.deepcopy(the_events)
original_of_the_persons = copy.deepcopy(the_persons)
for i in range(10):
# QUESTION: How to make the following copies?
the_events = copy.deepcopy(original_of_the_events)
the_persons = copy.deepcopy(original_of_the_persons)
print(" i =", i, ":", id(the_persons[1]), id(the_events[0].list_of_persons[1]), id(the_events[1].list_of_persons[0]))
# Do some random stuff with the two lists
# Rate the resulting lists
# Record the best configuration
# Save the best result in a file
我想過使用一些字典,進行獨立的名單,但是這將意味着大量的代碼修改,我想避免的。
非常感謝您的幫助!我對Python和StackExchange都是新手。
我覺得你不明白你在問什麼。 「依賴」和「依賴」列表是什麼意思?您能否提供一些例子,說明每個清單的內容以及相應的預期內容? – EvenLisle
對不起。我的意思是複製後,修改'event'類中的'person'不會導致'the_persons'列表中相應'person'的修改。我希望他們仍然聯繫在一起。如果你執行這個代碼,你會得到如下的東西:'Original:49619744 49619744 49619744' while the loop,you get:'i = 0:52093840 52093448 52093448''所以對象是相同的('id'是不同的)。這就是我的意思是依賴。我希望這能澄清我的問題。 – Ted