我刚开始学习 Python 并遇到了 id() 内置方法。 我发现它甚至为 id("sudgfkasdfgalds9834710931934019734216834jefhdkdj") 返回一个值。
根据我对 Python 教程和 What does id( ) function used for? 的理解, id() 返回一个内存地址。那么为什么要为甚至没有分配给任何变量的任何随机值返回内存地址。
最佳答案
Python 的本质不同于 C 等语言,在 C 语言中,变量或多或少是一个内存位置。
在 Python 中,变量赋值可以被认为是为对象分配标签。没有标签引用它们的对象最终会被垃圾收集器回收。多个标签可以指向同一个对象。
请看以下内容:
In [1]: a = 1
In [2]: b = 1
In [3]: id(a), id(b)
Out[3]: (34377130320, 34377130320)
a
和b
引用同一个对象。
请注意,在 Python 中,某些类型的对象(如数字和字符串)是不可变的。您不能更改它们的实例。见:
In [4]: a += 1
In [5]: id(a)
Out[5]: 34377130352
incementing 之后,a
指向一个不同的对象。
顺便说一句,当 CPython 启动时,它会为常用的小整数(如 0-100)创建对象。这些对象比您通常与整数关联的对象大得多。另请注意,使用内存地址作为 id
是 CPython 的实现细节。所以在 CPython 中我们可以这样做:
In [6]: id(2) - id(1)
Out[6]: 32
In [7]: (id(100) - id(0))/32
Out[7]: 100.0
所以在这种情况下(64 位 FreeBSD 操作系统,CPython 3.6)整数对象是 32 字节。
关于python-3.x - 为什么python中的id()也返回一个字面值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41589951/