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
注意a
和b
的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 示例。
参考: 官方文件