国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Python > 正文

Python id()函數

2023-04-24 19:21:38
字體:
來源:轉載
供稿:網友

Python id()是Python的一個內置函數,其作用是返回一個對象的身份標識。Python中一個對象的標識是一個整數。該整數保證對象在其生命周期中是唯一和固定的。在非覆蓋的生命周期中,兩個對象可能有相同的id()值,在CPython的底層實現中,id()函數用作獲取對象的內存地址。

Python id()語法格式

val = id(object)

參數

object:用于獲取標識的對象。

返回值

該函數的返回值是一個整數,是對象的標識。

Python id()函數

Python id()函數示例

Python中對象的id對于緩存變量的值是非常有用的,Python使用id()函數檢索變量值的機制使Python具有更好的性能,也會出現對于多個變量具有相同值的話,其id()值也會相同的。

1、參數是數值類型

a = 123
b = 123
c = b
print(f"id(a)={id(a)}")
print(f"id(b)={id(b)}")
print(f"id(c)={id(c)}")

d1 = 124
d2 = 124.0
e1 = 112.1
e2 = 112.1
print(f"id(d1)={id(d1)}")
print(f"id(d2)={id(d2)}")
print(f"id(e1)={id(e1)}")
print(f"id(e2)={id(e2)}")

f = 1+2j
g = 1+2j
print(f"id(f)={id(f)}")
print(f"id(g)={id(g)}")

h = 10
i = 0b1010
j = 0xA
print(f"id(h)={id(h)}")
print(f"id(i)={id(i)}")
print(f"id(j)={id(j)}")

輸出結果如下:

id(a)=8791228343776
id(b)=8791228343776
id(c)=8791228343776
id(d1)=8791228343808
id(d2)=46971184
id(e1)=44969648
id(e2)=44969648
id(f)=47414032
id(g)=47414032
id(h)=8791228340160
id(i)=8791228340160
id(j)=8791228340160

從上面的輸出的結果中可以具有相同值和類型的變量具有相同的id()值,即使不同的進制形式,如值相同其id()值也是相同的。這種機制使值相同的變量指向相同的內存以節省內存。

同時,也可以看到變量a,b,c和變量d1之間相差32,這正好是4個字節的32位。

下面再看看這種情況是否在字符串和元組中是否也存在。

2、參數是字符串和數組

str1 = "abc"
str2 = "abc"
str3 = "AbC"
print(f"id(str1)={id(str1)}")
print(f"id(str2)={id(str2)}")
print(f"id(str3)={id(str3)}")

t1 = (11,12,13)
t2 = (11,12,13)
t3 = (11,12,13.0)
print(f"id(t1)={id(t1)}")
print(f"id(t2)={id(t2)}")
print(f"id(t3)={id(t3)}")

輸出結果:

id(str1)=31050992
id(str2)=31050992
id(str3)=47970032
id(t1)=47936000
id(t2)=47936000
id(t3)=47968768

從輸出結果可以看出,具有相同值的字符串和元組也具有相同的id()值,不同的字符串或元組其id()值不同。

對字典或列表是否也是這樣呢?

3、參數是字典或列表

d1 = {"k1":1,"k2":2}
d2 = {"k1":1,"k2":2}
d3 = d2
print(f"id(d1)={id(d1)}")
print(f"id(d2)={id(d2)}")
print(f"id(d3)={id(d3)}")

lst1 = [11,12,13]
lst2 = [11,12,13]
lst3 = lst2
print(f"id(lst1)={id(lst1)}")
print(f"id(lst2)={id(lst2)}")
print(f"id(lst3)={id(lst3)}")

輸出結果如下:

id(d1)=47521472
id(d2)=47969088
id(d3)=47969088
id(lst1)=47908352
id(lst2)=47910080
id(lst3)=47910080

從輸出結果可以看出,值相同的字典或列表,其id()值不相同,只有通過兩個變量直接賦值的形式,其才會共享內存,具有相同的id()值。

總結以上各個案例可以看出,對于不可變對象(數字、字符串、元組)其值若相同,則變量的id()值是相同的,而對于可變對象(字典、列表)其值相同,但id()值不會相同,只有通過變量間直接賦值時,其id()值才會相同。

4、參數是自定義對象

#自定義對象
class Test:
    def __init__(self):
        self.data = 0

tmp1 = Test()
tmp2 = Test()
print(f"id(tmp1)={id(tmp1)}/nid(tmp2)={id(tmp2)}")

輸出結果:

id(tmp1)=47312080
id(tmp2)=48514816

以上是關于Python中內置函數id()的使用方法及案例,如有疑問請留言。

上一篇:Python hash()函數

下一篇:Python all()函數

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 友谊县| 麻城市| 宜宾县| 长葛市| 曲麻莱县| 澄迈县| 鸡泽县| 克东县| 阿拉善盟| 东安县| 建始县| 盐边县| 佛学| 武鸣县| 松阳县| 桃江县| 东城区| 凤台县| 抚州市| 德兴市| 嵊泗县| 广平县| 涟源市| 湖南省| 阜康市| 嫩江县| 白水县| 庆云县| 沙坪坝区| 张家界市| 牟定县| 吴忠市| 桐乡市| 郸城县| 台北县| 五常市| 义乌市| 滁州市| 商都县| 丰顺县| 称多县|