Python id()

Python id() 函数返回对象的身份。对象的身份是整数,保证在其生命周期内对该对象是独一无二的和恒定的。

Python 的 ID( )

Python 缓存常用数据类型的 id() 值,如 string, integer, tuples等,因此您可能会发现多个变量指同一个对象,如果它们的值相同,则具有相同的 id() 值。

 1# integers
 2a = 10
 3b = 10
 4c = 11
 5d = 12
 6
 7print(id(a))
 8print(id(b))
 9print(id(c))
10print(id(d))

输出:

14317900064
24317900064
34317900096
44317900128

注意ab的id()值是相同的,它们具有相同的整数值。

 1# tuples
 2t = ('A', 'B')
 3print(id(t))
 4
 5t1 = ('A', 'B')
 6print(id(t1))
 7
 8# strings
 9s1 = 'ABC'
10s2 = 'ABC'
11print(id(s1))
12print(id(s2))

输出:

14320130056
24320130056
34320080816
44320080816

从输出中看,很明显Python会缓存字符串和tuple对象,并使用它们来节省内存空间。

缓存只能使用不可变的对象,注意整数、字符串、字符串是不可变的,所以Python实现可以使用缓存来节省内存空间并提高性能。

我们知道 [字典]( / 社区 / 教程 / Python - 字典)不是不变的,让我们看看 id() 是否不同,即使元素相同。

1# dict
2d1 = {"A": 1, "B": 2}
3d2 = {"A": 1, "B": 2}
4print(id(d1))
5print(id(d2))

输出:

14519884624
24519884768

正如我们想象的那样, dict 对象会返回不同的 id() 值,这里似乎没有缓存。

Python id() 用于定制对象

让我们来看看一个简单的例子来获取一个自定义对象的 id() 值。

1class Emp:
2    a = 0
3
4e1 = Emp()
5e2 = Emp()
6
7print(id(e1))
8print(id(e2))

输出:

14520251744
24520251856

摘要

Python id() 值可保证为一个对象独特且恒定,我们可以使用此值来确定两个对象是否在内存中指向相同的对象。

您可以从我们的 GitHub 存储库中查阅完整的 Python 脚本和更多 Python 示例。

参考: 官方文件

Published At
Categories with 技术
Tagged with
comments powered by Disqus