我試圖實現R-樹數據結構,我有以下RNodeLeaf
類:將條目添加到數據結構是重複
class RNodeLeaf(object):
def __init__(self, entries=[]):
self._entries = entries
def addEntry(self, e):
self._entries.append(e)
,我想一些數據分發到我創建的節點。考慮這段代碼:
nodes = []
for i in range(8):
if i % 4 == 0:
node = RNodeLeaf()
nodes.append(node)
node.addEntry(5)
print(nodes)
print(nodes[0]._entries)
print(nodes[1]._entries)
所以我的假設是,有創造這是真的,因爲我印print(nodes)
和它們都有4個元素2 RNodeLeafs
。 但後來我打印print(nodes[x]._entries)
我很驚訝,因爲他們都是相同的數據。
[5,5,5,5,5,5,5,5]
那麼,我錯過了什麼,可以做些什麼來解決這個錯誤?
幾乎可以肯定這:https://stackoverflow.com/questions/1132941/least-astonishment-and-the-mutable-default-argument –
並修復它,更改'entries = []'到'entries = None ',並添加'如果條目爲None:entries = []' –
'nodes = []'是問題,但我懶得找到源來標記它是重複的。它會被評估一次,所以它總是一樣的列表。驗證'節點[0] ._條目是節點[1] ._條目' - 它們在內存中是完全相同的對象,而不僅僅是相同的。 –