python中
所有的python物件都有3個特徵: 身份,型別和值
其它內建型別
核心筆記:布林值
nonefalse
所有的值為0的數
0(整型)
0.0(浮點型)
0l(長整型)
0.0 + 0
.0j (複數)
""空字串
空列表() 空元組
{} 空字典
bool() #bool
()函式測試
>>> bool
()false
值不是上面列出來的是true
物件身份的比較:is is not 物件就像乙個裝著內容的盒子(記憶體位址)。當乙個物件被賦值到乙個變數,就像在盒子上貼了乙個標籤 表示建立了乙個引用。每當這個物件有了新的引用,就會在盒子上新貼上一張標籤。當乙個引用被銷毀,標籤化就會 撕掉。而每個物件都有乙個引用計數器來記錄引用的次數,當引用為0,物件銷毀.
不可變資料物件:數字和字串,元組,不能改變物件本身(不能再當前記憶體位址對該物件改變,要獲得新的值的再開闢記憶體儲存物件),只能改變引用的指向,稱為不可變資料物件(immutable object)。
可變資料物件:可以通過引用其元素,改變物件自身(in-place change)。這種物件型別,稱為可變資料物件(mutable object),字典,列表,集合。
例子1:
>>> a = 2 #賦值就建立了乙個指向 物件 "2" 的引用a.>>>id(a) #物件 2 的記憶體位址
24834392
>>> a = '
banana
' #將 引用a 指向了物件『banana』.
>>>id(a)139990659655312
記憶體中建立了乙個字串物件『banana』,通過賦值 將 引用a 指向了 『banana』,同時,物件1不在有引用指向它,它會被python的記憶體處理機制給當我垃圾**,釋放記憶體。
例子2:
>>> a = 3>>> b = 3
>>>id(a)
10289448
>>>id(b)
10289448
#物件 3 存在2個應用 a 和 b
例子3:
1. a = 4
2. b = a(這裡就是讓引用b指向引用a指向的那個物件)
3. a = a + 2
>>> a = 4>>> b =a
>>>id(a)
36151568
>>>id(b)
36151568
可以看到 a 和 b 都指向了 整數物件 4
>>> a = a+2>>>id(a)
36151520
>>>id(b)
36151568
可以看到 a 的引用改變了,但是 b 的引用未發生改變;a,b指向不同的物件;第3句對 a 進行了重新賦值,讓它指向了新的 物件6;即使是多個引用指向同乙個物件
,如果乙個引用值發生變化,那麼實際上是讓這個引用指向乙個新的引用,並不影響其他的引用的指向。從效果上看,就是各個引用各自獨立,互不影響。
例子4: 可變物件引用
1. l1 = [1, 2, 3]
2. l2 = l1
3. l1[0] = 10
當執行第1步 和 第二步 的時候,檢視一下 l1 和 l2 的引用情況:>>> l1 = [1,2,3]
>>> l2 =l1
>>>id(l1)
139643051219496
>>>id(l2)
139643051219496此時 l1 和 l2 的引用相同,都是指向 [1,2,3]這個列表物件。
接下來,繼續執行第3步:>>> l1[0] = 10
>>>id(l1)
139643051219496
>>>id(l2)
139643051219496
>>>l2
[10, 2, 3]
l1 和 l2 的引用沒有發生任何變化,但是 列表物件[1,2,3] 的值 變成了 [10,2,3](列表物件改變了)
我們不再對l1這一引用賦值,而是對l1所指向的表的元素賦值。結果是,l2也同時發生變化。
原因何在呢?因為l1,l2的指向沒有發生變化,依然指向那個表。表實際上是包含了多個引用的物件(每個引用是乙個元素,比如l1[0],l1[1]..., 每個引用指向乙個物件,
比如1,2,3), 。而l1[0] = 10這一賦值操作,並不是改變l1的指向,而是對l1[0], 也就是表物件的一部份(乙個元素),進行操作,所以所有指向該物件的引用都受到影響。
is關鍵字:
python的物件引用
首先,我們來了解一下python的基礎概念 1.python在heap中分配的物件分成兩類 可變物件和不可變物件。所謂可變物件是指,物件的內容是可變的,例如list。而不可變的物件則相反,表示其內容不可變。不可變物件 int,string,float,tuple 可變物件 list,dictiona...
python物件引用(變數)
python將所有資料存為記憶體物件 變數事實上是指向記憶體物件的引用 動態型別 在任何時刻,只要需要,某個物件引用都可以重新引用乙個不同的物件 可以是不同的資料型別 內建函式type 用於返回給定資料項的資料型別 等號用於將變數名和記憶體中的資料物件繫結,如果物件事先存在,則直接繫結,否則,建立引...
python物件引用的問題
python 動態的引用物件會出現一些比較奇怪的現象。如result listdict result dict foriinrange len result list ifi self.n break 執行結果是list中所以的元素都是最後dict中的值 如果想得到正確的結果,則需要改為 resul...