python-3.x - 为什么python中的id()也返回一个字面值

标签 python-3.x

我刚开始学习 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)

ab 引用同一个对象。

请注意,在 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/

相关文章:

python - 我想让命令 python3 运行 python3.7

python - 管理 MySQL 数据最快的方法是什么? Pandas vs fetch_row

python-3.x - 如何只保留 pdf 文本或图像的注释部分?

python - gensim 的 word2vec 中的图层大小

python - 当我尝试使用 Paffy 获取 YouTube 播放列表的视频链接时出现错误

python - 如何复制列表中的项目(保留第一个和最后一个项目)并将列表转换为两个项目的列表列表

python - Kinesis Firehose λ 转换

python-3.x - django.db.utils.DatabaseError : Error while trying to retrieve text for error ORA-01804

python - 我认为 jupyter-qtconsole 已损坏,因为我运行的是 os x 10.10.5。不更新怎么解决?

python - 异常必须派生自 BaseException