Python-變量對象引用

學習python首先要了解這三個的關係,變量、對象、引用、類型
這個要記住:類型存在於對象、變量通過引用鏈接上對象
變量在賦值的時候才創建,可以引用任何類型的對象、並且使用之前比許進行賦值。

<center>Python-變量對象引用

例如:
》》:a = 3
其實是完成了三個事情:

1.創建了一個int類型的對象3
2.創建了一個名爲a的對象
3.將變量名a與int類型的對象3相連接

Python-變量對象引用

變量實際上是到對象內存空間的一個指針,變量是一個系統表的元素,擁有指向對象的鏈接空間。
對象是分配的一塊內存,有足夠的空間去表示他們所代表的的值
引用是自動形成的從變量到對象的指針

記住:每一個對象都有兩個東西,對象類型和引用的計數器 這連個東西決定了是否自動回收。
對象的垃圾回收:每個對象保持了一個引用計數器,計數器記錄了當前指向該對象的引用的數目,一旦這個計數器爲0,這個對象的內存空間就會被自動回收。

import sys
print(sys.getrefcount(L)) 查看引用對少次

getrefcount(...)
getrefcount(object) -> integer
    Return the reference count of object.  The count returned is generally
    one higher than you might expect, because it includes the (temporary)
    reference as an argument to getrefcount().     

共享引用

思考:
a =  "3"
b = a
a = "spam"
這樣輸出b會是多少?          

Python-變量對象引用
Python-變量對象引用
變量a引用了spam對象的內存空間,所有值錢對象3肯定是還有引用的,那麼誰用呢就是變量b

a = 3
b = a
a = a + 3

Python-變量對象引用

L = [1,2,3]
L2 = L
L = 24
此時L2依然不會變,如果寫下面的語句替換L=24
L[0] = 24
這樣就更改了L2的值,因爲列表L引用的是對象、L[0]是在原處修改了引用值,L與L2是共享引用的,所以L修改了第一個對象的引用,L2也會改變
Python-變量對象引用
更好的理解共享引用

    ==,is 
    is 是比較實現應用的指針,如果不用變量名,引用相同指針,那麼返回true。

Python-變量對象引用
Python-變量對象引用

第一個題:A和B最初共享與引用,但是後來B重新指向了另一個對象,所以不影響A
第二題:A和B最初共享引用,但是列表支持在原處修改,所以賦值B[0]就是在原處修改了重新指向別的地方的指針,那麼A肯定也更改了,區別就在於B[0]就是在原處修改。
第三題,其實B=A[:]是創建了兩個list,A和B,即創建了兩個列表A,B,兩個擁有相同值的不同列表對象,所以B[0]在原處修改,不會影響A

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章