可變與不可變類型
Python的每個對象都分為可變和不可變司顿,主要的核心類型中,數(shù)字盈蛮、字符串废菱、元組是不可變的,列表抖誉、字典是可變的殊轴。
對不可變類型的變量重新賦值,實際上是重新創(chuàng)建一個不可變類型的對象袒炉,并將原來的變量重新指向新創(chuàng)建的對象(如果沒有其他變量引用原有對象的話(即引用計數(shù)為0)旁理,原有對象就會被回收)。
不可變類型??? 以int類型為例:實際上 i += 1 并不是真的在原有的int對象上+1我磁,而是重新創(chuàng)建一個value為6的int對象孽文,i引用自這個新的對象。
通過id函數(shù)查看變量i的內(nèi)存地址進行驗證(使用hex(id(i)) 可以查看16進制的內(nèi)存地址)
結(jié)果
可以看到執(zhí)行 i += 1 時夺艰,內(nèi)存地址都會變化芋哭,因為int 類型是不可變的。再改改代碼郁副,但多個int類型的變量值相同時减牺,看看它們內(nèi)存地址是否相同。
結(jié)果
對于不可變類型int,無論創(chuàng)建多少個不可變類型拔疚,只要值相同肥隆,都指向同個內(nèi)存地址。同樣情況的還有比較短的字符串稚失。
對于其他類型則不同栋艳,以浮點類型為例,從代碼運行結(jié)果可以看出它是個不可變類型:對i的值進行修改后墩虹,指向新的內(nèi)存地址。