python 記憶體模型

2021-09-26 02:34:20 字數 886 閱讀 9850

python 記憶體模型

1.python變數採用引用語義,每乙個變數名儲存的是實際存放資料的記憶體的位址;

01.讀取資料時,x=10,可以認為,通過唯讀指標(位址)訪問資料10所在的記憶體空間,

通過變數中存放的位址訪問記憶體只能讀,不能寫;

02.寫,需要重新分配一塊記憶體空間,存放新資料,並用新位址替換變數中存放的原有的位址;

解釋001.乙個變數x,x是乙個變數的標號,對標號x進行讀取,是讀取標號x儲存的位址所對應的記憶體(無標號記憶體)中的資料;

002.對標號x寫操作,申請一塊新的無標號記憶體,並將新記憶體的位址寫入x對應的儲存空間中。

(無標號記憶體中的資料,只能夠被讀取和銷毀,不能更改)

注意:s=[15,20],s對應記憶體不是無標號,其標號是s[0],s[1]

python中物件也是一塊記憶體,記憶體中包含屬性,方法和型別,通過引用訪問物件

a=a(),首先python建立乙個物件a,然後宣告乙個變數a,再將變數a與物件a聯絡起來

變數a沒有型別,它的型別取決於其關聯的物件,a=a(),

a是乙個a型別的引用,可以說a是a型別的,

a=3,a就是乙個整型的引用

python不是弱型別語言

python中變數類似c中的指標,和c不同的是python中的變數可以指向任何型別

python中所有的變數都是引用型別

python中,對乙個變數進行賦值操作,將導致此變數指向新的記憶體空間,而不是修改老的記憶體空間

python中,除了賦值操作會引起引用指向的新的記憶體空間,python是允許通過引用呼叫物件

的成員函式改變原有的記憶體空間資料的

array=[1,2,3] array.extend([4,5]) array沒有指向新的記憶體空間,其內容變為[1,2,3,4,5]

python物件記憶體模型

首先介紹一下python物件的記憶體模型,如下圖1所示 圖1.pyobject物件記憶體模型 上圖可以看到,乙個pyobject必須包含ob refcnt和ob type 這兩個屬性 ob refcnt是這個物件的引用計數,而ob type則是指向 typeobject結構體的指標,它是python...

python高階之記憶體模型

每乙個程式語言的背後都有自己獨特的記憶體模型支援,比如最經典的c語言,乙個int型別佔8位元組。那麼在python中不區分資料型別,定義乙個變數其在內存在占用多少位元組呢?python中資料的運算其記憶體是如何變化的呢?python一切資料皆為物件,python中的物件分成兩類 可變物件和不可變物件...

python記憶體模型 Python結構的記憶體大小

這些答案都收集淺層尺寸資訊。我懷疑訪問此問題的訪問者最終將在這裡回答以下問題 此複雜物件在記憶體中有多大?這裡有乙個很好的答案 https 重點 import sys def get size obj,seen none recursively finds size of objects size ...