我有一個類的對象列表。當我改變我在追加函數中使用的對象時,列表也會改變。這是爲什麼?我來自C++,所以這很奇怪。Python:當在append()函數中輸入的對象發生更改時,對象列表發生更改
我有以下代碼:
class state:
def __init__(self):
self.x=list([])
self.possibleChests=list([])
self.visitedChests=list([])
def __str__(self):
print "x ",
print self.x
print "possibleChests ",
print self.possibleChests
print "visitedChests ",
print self.visitedChests
return ""
def addKey(self,key):
self.x.append(key)
def __eq__(self,other):
if isinstance(other,self.__class__):
return self.__dict__==other.__dict__
else:
return False
current_state=state()
current_state.addKey(4)
current_state.possibleChests.extend([1,2,4])
current_state.visitedChests.append(5)
visitedStates=list([])
visitedStates.append(current_state)
current_state.addKey(5)
if(current_state in visitedStates):
print "Got ya!!"
else:
print "Not in list!!"
而我得到的輸出:
Got ya!!
我已經改變了current_state對象,因此它不應該出現在列表中。
你不的端部將*副本*放入列表中 - 這是對*完全相同的對象*的引用。 – jonrsharpe
與提示不同嗎?因爲在提示時,當我更改變量時,列表不會更改。如何在列表中添加值? – user2105632
提示符是一樣的;沒有看到確切的代碼,我無法解釋爲什麼你認爲它是不同的。你不能「按值添加」 - 這是Python中的所有引用。像'current_state'這樣的名字和像'list'這樣的集合只是提供了對底層對象的引用。如果你想要一個獨立版本的對象,定義一個方法來拷貝它 - 參見https://docs.python.org/2/library/copy.html – jonrsharpe