0
我使用對象的列表在python具有一個問題:在Python對象,使用的方法的一個元件上的列表適用方法整個列表
我聲明瞭對象的列表如下:
chain = [Node(1), Node(2), Node(3),
Node(4), Node(5), Node(6),
Node(7), Node(8), Node(9)]
與節點是一個簡單的類:
class Node:
def __init__(self, data, links = []):
self.node_links = links
self.node_data = data
def add_link(self, link):
self.node_links.append(link)
(...)
def to_str(self):
s = "node nb " + str(self.node_data) + " linked to:"
for link in self.node_links:
s += " Node " + str(link.node_to.node_data)
return s
(...)
一切正常,從這裏開始,除非我使用的方法add_link()的元素在我的名單「產業鏈」,它執行方法在所有e我的鏈條悠閒。
例如,
chain[0].add_link(Link(chain[3], 0.25))
for e in chain:
print(e.to_str())
將輸出
node nb 1 linked to: Node 4
node nb 2 linked to: Node 4
node nb 3 linked to: Node 4
node nb 4 linked to: Node 4
node nb 5 linked to: Node 4
node nb 6 linked to: Node 4
node nb 7 linked to: Node 4
node nb 8 linked to: Node 4
node nb 9 linked to: Node 4
我名單中所有的元素似乎已經影響我的發言。
我對此很困惑。我試過到處搜索(代碼&互聯網),但我找不到我做錯了什麼。有人有想法嗎?
http://docs.python-guide.org/en/latest/writing/gotchas/#mutable-default-arguments –
它可能看起來奇怪的是,Python有這種行爲,但它在某些情況下可能會有用,例如充當緩存。儘管如此,如果你想使用可變默認參數,這是一個好主意,可以評論你是故意調用該行爲。否則,讀取你的代碼的人可能會認爲它是一個錯誤。 –
感謝大家。事實上,即使我的IDE警告過我關於可變參數的問題,作爲一個noob我忽略了這個警告,我應該看看它。 –