goupby 两个值 结果变了_一道问题引出的python中可变数据类型与不可变数据类型...
一. 問題的提出
我們先來看兩個對比
第一道題,當對象為整數時,最終結果:b = 2, a = 1,b的變化沒有引起a的變化
第二道題,當對象為字典時,最終結果:a = {“name”:“jack”,“age”:27}, b = {“name”:“jack”,“age”:27},b的變化引起了a的變化
那么,為什么上述兩道題的結果會有如此大的區別呢?我們就來了解一下可變數據類型和不變數據類型
二. 可變數據類型和不可變數據類型
- 可變數據類型有:列表list、字典dict
- 不可變數據類型有:整型int、浮點型float、字符串string和元組tuple
python中有一個id()函數,可用來獲取對象的內存地址,我們針對第一題,可以看一下a和b指向的對象的內存地址有什么變化
我們可以清晰的看到,a = 1, b = a,這兩個操作中,變量a和b指向的對象的內存地址是一樣的,也就是說a和b其實引用了同一個對象1。那為什么整型是不可變數據類型呢?這里可以理解為a和b的引用地址處的值是不能被改變的,也就是1814284368地址處的值在沒被垃圾回收之前一直是1,不能改變,如果把b賦值為2,那么,只能把b的引用地址從1814284368變為1814284400,相當于b += 1這個賦值又創建了一個新的對象2,然后變量a仍然指向對象1,而變量b指向了對象2,變量b的變化并不會引起a的改變,因為它們指向的是不同的對象
我們大概畫個演示圖:
圖一:a = 1, b = a
圖二: b += 1
我們再來看字典,先用id()看一下內存地址的變化
可以看到,變量a和b同時指向一個字典對象,當給變量b指向的字典添加元素后,b指向的字典的內存地址并不會發生變化,也就是說,對b的操作不會改變a引用的地址值,相當于同樣一個地址得到了擴充,由于a和b指向同一個地址,所以b的變化會引起a的變化
圖一:a = {“name”: “Jack”}, b = a
圖二:b[“age”] = 27
轉自:一道問題引出的python中可變數據類型與不可變數據類型 - My&Captain - 侵刪
總結
以上是生活随笔為你收集整理的goupby 两个值 结果变了_一道问题引出的python中可变数据类型与不可变数据类型...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux tee的花式用法和pee
- 下一篇: python返回unicode_我们如何