python中数据类型转换原理_python的可变与不可变数据类型的原理是什么呢?
Python中變量的進階知識:
涉及到Python的對象知識。
即:可變對象和不可變對象。題目中的可變和不可變數(shù)據(jù)類型,表述不準(zhǔn)確。
Python中,一切皆對象。
對象是一種抽象。抽象是什么?抽象就是一種概念上的簡化。
《learning python》中的一個觀點:變量無類型,對象有類型。
對象包括三個元素:ID、Type、Value。
ID:是對象在內(nèi)存的地址。
Type:是對象的類型。
Value:是對象的值。
以 整數(shù) 1 作為對象為例:
1.將對象 1 賦值引用給變量 a:(變量對對象是一種引用)
a = 1
2.不用聲明數(shù)據(jù)類型,python自動識別為整數(shù) int 1。
>>> a=1
>>> type(a)
3.對象 1 此時的 value數(shù)值 是1。
4.對象 1 的內(nèi)存地址(變量引用的內(nèi)存地址id):
>>> a=1
>>> id(a)
4433791280
所以改變一個對象,有三種方式:改變value值、改變type數(shù)據(jù)類型、改變id內(nèi)存地址的引用。
拋開type數(shù)據(jù)類型,因為數(shù)據(jù)類型通過int()str()可以直接轉(zhuǎn)換。
只討論value和id。
不可變對象:是什么不可變呢?
可變對象:是什么可變呢?
上面的對象: 整數(shù) 1 ,
可以被無數(shù)的變量a,b,c,d,apple,進行賦值引用。
但是,
對象 1 在內(nèi)存地址的引用卻沒有變化。
對象本身沒有因為變量的賦值引用,而發(fā)生任何變化。
所以是不可變對象。
>>> a =1
>>> b =1
>>> c =1
>>> d =1
>>> apple =1
>>> id(a)
4399315248
>>> id(b)
4399315248
>>> id(c)
4399315248
>>> id(d)
4399315248
>>> id(apple)
4399315248
除非新建一個對象 2,
在用變量a,b,c,來賦值引用對象2。
>>> a=2
>>> b=2
>>> c=2
>>> id(a)
4433791312
>>> id(b)
4433791312
對比下對象1 和對象2的內(nèi)存地址的差別:
>>> id(1)
4433791280
>>> id(2)
4433791312
對象1 和對象2 ,雖然變量各種變化,但是各自的內(nèi)存地址并未改變。
所以,整數(shù)型int 的對象,為不可變對象。
可變對象
對象 :列表 [1,2,3]
可以被無數(shù)的變量a,b,c,d,apple,進行賦值引用。
對象 [1,2,3] 和對象 [1,2,3] ,雖然看起來都是對象 [1,2,3] ,但所在內(nèi)存地址的引用,都不相同。
對象本身看似相同,實則內(nèi)存地址完全不同(不同變量對看似同一對象的賦值引用到的內(nèi)存地址不同)。
所以,是可變對象。
>>> a = [1,2,3]
>>> b = [1,2,3]
>>> id(a)
4560147392
>>> id(b)
4518877376
關(guān)于可變對象的引用拷貝:
對比兩段代碼:
>>> a = [1,2,3]
>>> b = [1,2,3]
>>> id(a)
4560147392
>>> id(b)
4518877376
>>> b.append(5)
>>> print(b)
[1, 2, 3, 5]
>>> print(a)
[1, 2, 3]
和代碼二:
a=[1,2,3]
>>> b=a
>>> b.insert(0,9)
>>> print(b)
[9, 1, 2, 3]
>>> print(a)
[9, 1, 2, 3]
>>> id(a)
4561102848
>>> id(b)
4561102848
可變對象中,第二段代碼,關(guān)于list的淺拷貝:
淺拷貝:
待補充
總結(jié)
以上是生活随笔為你收集整理的python中数据类型转换原理_python的可变与不可变数据类型的原理是什么呢?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 京东抢购助手_[Windows] 京东极
- 下一篇: python saltstack web