python一个对象只能被一个变量引用吗_python中的对象、变量、引用的问题
對象、變量、引用
對象
對象包括 不可變對象 和 可變對象。但從某種意義上來說,可變和不可變并不是對立關(guān)系。
int,string,float,tuple 這四類屬于 不可變對象。這里不可變的含義是:對象的地址不可變,內(nèi)存地址與該對象為一一對應(yīng)關(guān)系。
list, dict 這兩類屬于 可變對象。這里可變的含義是:可變對象由不可變對象構(gòu)成,可變對象自身的物理地址不可改變,但構(gòu)成它的不變對象可以被替換
以兩個int對象為例,先來看一個例子:
···
def check_const_variable():
x = 77
y = x
經(jīng)過上兩步操作,x和y現(xiàn)在均指向儲存對象77的內(nèi)存地址 38076456
print('x id:' + str(id(x))) #38076456
print('y id:' + str(id(y))) #38076456
對x進(jìn)行重新賦值,x指向儲存對象69的內(nèi)存地址 38074656
x = 69
print('x id:' + str(id(x))) #38074656
檢查y,發(fā)現(xiàn)y仍然指向38076456,說明77這個對象沒有被改變
print('y id:' + str(id(y))) #38076456
z = [77]
w = z
經(jīng)過上兩步操作,z和w現(xiàn)在均指向儲存對象[77]的內(nèi)存地址 39114944,z的第一個元素地址38074656
print('z id:' + str(id(z))) #39114944
print('w id:' + str(id(w))) #39114944
print('z first element id:' + str(id(z[0]))) #38074656
對z的第一個元素進(jìn)行重新賦值,z從內(nèi)容上來已經(jīng)是一個新的列表,但是它的物理地址沒變。而此時z的第一個元素已經(jīng)被替換。
z[0] = 65
print('z first element id:' + str(id(z[0]))) #38074752
再檢查w,發(fā)現(xiàn)w仍然指向39114944,說明[77]這個對象的地址沒有被改變,w一直指向它。
print('w id:' + str(id(w))) #39114944
print('w first element id:' + str(id(w[0]))) #38074752
···
變量 和 引用
-變量是一個系統(tǒng)表的元素,擁有指向?qū)ο蟮倪B接的空間。
-引用是自動形成的從變量到對象的指針
···
x = 69 #x是一個變量,69是一個不可變對象,x中儲存了69這個不可變對象的內(nèi)存地址
y = [69,33,44] #y是一個變量,[69]是一個可變對象,y中儲存了[69]這個不可變對象的內(nèi)存地址
print id(x) #38074656
print id(y) #39115016
print id(y[0]) #38074656
···
從上面的例子可以看到,x和y的關(guān)系是:y->39115016->[38074656,...,...]
而其中的 箭頭->,就表示引用
創(chuàng)建對象
不可變對象的創(chuàng)建后,相同內(nèi)容的不可變變量 在同一個進(jìn)程中內(nèi)存地址是相同的
···
x = 100
y = 'hello'
z = 156.0
y = 100
print id(x) #38075904
print id(y) #38075904
···
也就是說在這個進(jìn)程中,無論創(chuàng)建幾個100整形變量,它的地址都是38075904。
可變對象創(chuàng)建后,相同內(nèi)容的可變變量 在同一個進(jìn)程中內(nèi)存地址是不同的
···
xx = [100]
yy = [100]
print id(xx) #39115016
print id(yy) #39115376
···
復(fù)制對象
-當(dāng)把一個對象賦給一個數(shù)據(jù)結(jié)構(gòu)元素或者變量名時,python總是會存儲對象的引用,而不是對象的一個拷貝。
-字符串方法都生成了新的字符串對象。
總結(jié)
以上是生活随笔為你收集整理的python一个对象只能被一个变量引用吗_python中的对象、变量、引用的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Cyclone V LAB ALM结构
- 下一篇: python视觉识别字_Python通过