這個問題比任何事情都更好奇。爲什麼同等整數的行爲與平等列表不同?
我一直在閱讀的int對象在Python(1和2)的執行細節,並就我所看到的,一個Python int基本上是一個C指針的結構,對不對?
所以現在的問題是,基本上,在Python 內部所以相當於在Python 2個int
s,而等於複雜的類型,如list
沒有指向同一個實例發生,確實:
>>> a=5
>>> b=a
>>> print "id a: %s, id b: %s" % (id(a), id(b))
id a: 40802136, id b: 40802136
>>> b+=1
>>> print "a: %s, b: %s" % (a, b)
a: 5, b: 6
>>> print "id a: %s, id b: %s" % (id(a), id(b))
id a: 40802136, id b: 40802112
>>> a=[5]
>>> b=a
>>> print "id a: %s, id b: %s" % (id(a), id(b))
id a: 45930832, id b: 45930832
>>> b.append(1)
>>> print "a: %s, b: %s" % (a, b)
a: [5, 1], b: [5, 1]
>>> print "id a: %s, id b: %s" % (id(a), id(b))
id a: 45930832, id b: 45930832
我的猜測是,通過查看上述實例的id
是因爲修改整數會創建一個新實例並將新內存地址重新分配給該變量。我懷疑是否正確?如果是這樣,有沒有人知道有這樣的整體行爲的「歷史」決定?是否這樣程序員不會堅果當int
變量分配給其他變量? (我完全沒問題,順便說一下:-D)
正如我所說的,這主要是一種好奇心。先謝謝你!
調用對象的'.append()'方法與將名稱與'='運算符重新綁定完全不同。它與對象的類型完全沒有關係,除了'int'沒有方法可以改變它。 http://nedbatchelder.com/text/names.html是如何在Python中使用名稱的一個很好的解釋。 – geoffspear
我會說'a + = b'就像'a = a + b',但事實並非如此。列表中的'+ ='與Python中的'extend'完全相同(這很愚蠢)。 =/ – Ryan
是的,你們是對的。我的例子並不好。我應該說什麼@minithech提到 – BorrajaX