亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中怎么查看變量的內存地址

發布時間:2022-02-22 16:58:28 來源:億速云 閱讀:2549 作者:iii 欄目:開發技術

這篇文章主要講解了“Python中怎么查看變量的內存地址”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Python中怎么查看變量的內存地址”吧!

一、Python變量

在大多數語言中,為一個值起一個名字時,把這種行為稱為“給變量賦值”或“把值存儲在變量中”。不過,Python與許多其它計算機語言的有所不同,它并不是把值存儲在變量中,而像是把名字“貼”在值的上邊(專業一點說法是將名字綁定了對象)。所以,有些Python程序員會說Python沒有變量,只有名字,通過名字找到它代表的值。

 Python中的變量,與其它開發語言(如C語言)的不同:

在C語言中,變量類似于一個“容器”,賦給它的值,裝在容器中。

在python,變量類似于名字標簽“貼”在值上面,通過名字找到它代表的值。

1.1 第一點

先說明第一點:變量的實現方式有:引用語義、值語義

python語言中變量的實現方式就是引用語義,在變量里面保存的是值(對象)的引用(值所在處內存空間的地址)。采用這種方式,變量所需的存儲空間大小一致,因為其中只需要保存一個引用。而有些語言(例如c)采用的不是這種方式,它們把變量直接保存在變量的存儲區里,這種方式就稱為值語義。這樣的話,一個整數類型的變量就需要保存一個整數所需要的空間(例如c語言中int類型占用4個字節大小)。

python中變量與對象的引用關系類似于c語言的指針變量與指向地址之間的關系。

在python的數據結構中,對象分為可變對象和不可變對象。基本數據類型如int、float,元祖tuple、str是不可變對象;list(列表)、dict(字典)、set(集合)是可變對象,可變對象存儲的元素的引用其實是沒有改變的,改變的是其引用指向的值。

采用引用語義存儲的只是一個變量的值所在的內存地址,而不是這個變量的值本身。

1.2 第二點

現在說明第二點:Python中的變量、對象、引用三者之間的關系。

在Python里一切皆對象。Python中,對象具有三要素:標識(identity)、類型(type)、值(value)。

☆標識(identity):

用于唯一標識對象,通常對應對象在計算機內存中的地址。使用內置函數id(obj)返回對象唯一標識。

☆類型(type):

類型可以限制對象的取值范圍和可執行的操作。使用內置函數type(obj)返回對象所屬類型。

對象中含有標準的頭部信息:類型標識符。標識對象類型,表示對象存儲的數據的類型。

每一個對象都有兩個標準的頭部信息:

1.類型標識符,去標識對象的(數據)類型;

2.引用計數器,記錄當前對象的引用的數目。

(回收機制:變量的引用計數器為0,自動清理。 ※ 較小整數型對象有緩存機制。)

☆值(value):

表示對象存儲的數據的信息。使用內置函數print(obj)可以直接打印值。

Python中,變量用來指向任意的對象,是對象的引用。Python變量更像是指針(或者說Python變量更像“貼簽”),而不是數據存儲區域(而不是數據“容器”)。

Python 中的變量不是裝有對象的“容器”,而是貼在對象上的“標簽”——給一個變量賦值,把這個標簽貼到一個對象上,重新賦值,是撕下標簽貼到另一個對象上。

在python中,變量保存的是對象(值)的引用,采用這種方式,變量的每一次初始化,都開辟了一個新的空間,將新內容的地址賦值給變量。id()函數可以獲取變量在內存中的地址。我們把不同的值賦給變量時候,地址發生變化,相同的值地址不發生變化。下面給出示例:

在Python中,值可以放在內存的某個位置(地址),變量用于引用它們,給變量賦一個新值,原值不會被新值覆蓋,變量只是引用了新值。順便說明,Python的垃圾回收機制會自動清理不再被用到的值,所以不用擔心計算機內存中充滿被“丟棄”的無效的值。

1.3 第三點

現在說明第三點:可變(mutable) 類型對象、不可變(immutable) 類型對象

可變類型對象,指對象可以在其 id() 保持固定的情況下改變其取值。

不可變類型對象,指具有固定值的對象。不可變對象包括數字(numbers)、字符串(strings)和元組(tuples)。這樣的對象不能被改變。如果必須存儲一個不同的值,則必須創建新的對象。不可變對象不允許對自身內容進行修改。如果我們對一個不可變對象進行賦值,實際上是生成一個新對象,再讓變量指向這個對象。哪怕這個對象簡單到只是數字 0 和 1。

由于 Python 中的變量存放的是對象引用,所以對于不可變對象而言,盡管對象本身不可變,但變量的對象引用是可變的。運用這樣的機制,有時候會讓人產生糊涂,似乎可變對象變化了。如下面的代碼:

i = 73 

i += 2

不可變的對象的特征沒有變,依然是不可變對象,變的只是創建了新對象,改變了變量的對象引用。

對于可變對象,其對象的內容是可以變化的。當對象的內容發生變化時,變量的對象引用是不會變化的。如下面的例子。

m=[5,9] 

m+=[6]

二、總結

Python變量指的是名字綁定了對象(綁定就是將一個對象與一個名字聯系起來)。

綁定時,變量就是名字。

使用時,變量代表對象的引用。

變量改變的只有綁定關系。

補充說明:

對復雜的數據類型(列表、集合、字典),如果添加某一項元素,或者添加幾個元素,不會改變其本身的地址,只會改變其內部元素的地址引用,但是如果對其重新賦值時,就會重新賦予地址覆蓋就地址,這時地址就會發生改變。示例代碼如下:

list_ = [1,2,3,4]
print(list_, id(list_))
list_.append(5)
print(list_, id(list_))
#如上代碼,因為append前后的list_仍然是同一個對象,只是對象的值發了改變,所以地址不變。
 
#再如下面的代碼
print(list_, id(list_), id(list_[1]))#打印列表、列表的地址、第二個元素的地址
list_[1] = 'aaa'   #修改列表
print(list_, id(list_), id(list_[1]))#打印列表、列表的地址、第二個元素的地址
#不難發發現:列表變了、列表的地址沒有變、列表內部元素變了、列表內部元素的地址變了

感謝各位的閱讀,以上就是“Python中怎么查看變量的內存地址”的內容了,經過本文的學習后,相信大家對Python中怎么查看變量的內存地址這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

达日县| 澄迈县| 集安市| 仙居县| 涟源市| 皋兰县| 洛扎县| 深水埗区| 普宁市| 高要市| 郓城县| 平武县| 项城市| 涞水县| 安塞县| 文昌市| 拜城县| 星子县| 大城县| 南乐县| 阜平县| 如皋市| 峨眉山市| 洮南市| 田东县| 西乌珠穆沁旗| 元阳县| 油尖旺区| 顺昌县| 宣威市| 陇川县| 华蓥市| 苍梧县| 桐乡市| 巩义市| 普兰店市| 阜新市| 巴里| 越西县| 鱼台县| 慈利县|