I think at a high level it can be done with a dict, where the key is the variable name (str?) and the value is the reference that it’s associated with.

这也是它内部工作的方式.在CPython中,变量名和它们指向的对象通常存储在Python字典中;编写Python代码时可以使用的相同数据结构.

当你写x = 5时,名字x被设置为全局名称字典中的一个键,其中5为相应的值.您可以使用globals()函数返回并检查此字典,该函数提供当前作用域命名空间的内容.

所以你的名字x占据空间也是正确的.它作为字符串存在于内存中,而Python则为字典的键保留对它的引用.

如果你想更深入地了解CPython源代码以查看x被分配给值5的位置,你可以查看ceval.c.写入x = 5会触发LOAD_CONST操作码(将整数5放入堆栈)以及STORE_GLOBAL操作码*(将名称x设置为字典中的键,值为5).

Here是STORE_GLOBAL操作码的代码:

TARGET(STORE_GLOBAL) {

PyObject *name = GETITEM(names, oparg);

PyObject *v = POP();

int err;

err = PyDict_SetItem(f->f_globals, name, v); /* call to update dict */

Py_DECREF(v);

if (err != 0)

goto error;

DISPATCH();

}

您可以看到对PyDict_SetItem的调用以更新全局字典.

*如果检查x = 5生成的字节码(例如使用dis),您可能会看到使用的STORE_NAME操作码.此操作码以相同的方式起作用(有关简要说明,请参阅here).

python中变量名存储在哪里_python – 如何在内部存储和映射变量名称?相关推荐

  1. python中直方图bins是什么意思_Python 中下划线的 5 种含义都是什么?

    亲爱的小伙伴们 咱们8月整月开课计划已出 座位有限 感兴趣的小伙伴赶紧预约啦 建策科技8月开班计划 译者:泰然 https://dbader.org/blog/meaning-of-underscor ...

  2. python中int占几个字节_Python中int占几个字节

    Python中int占几个字节 以python3版本为例说明, int 类型在python中是动态长度的.因为python3中int类型是长整型,理论支持无限大的数字,但它的结构其实也很简单, 在 l ...

  3. python中变量名后的逗号_Python中逗号的三种作用实例分析

    本文实例讲述了Python中逗号的三种作用.分享给大家供大家参考.具体分析如下: 最近研究python  遇到个逗号的问题 一直没弄明白 今天总算搞清楚了 1.逗号在参数传递中的使用: 这种情况不多说 ...

  4. python中对类变量的访问形式_Python 面向对象中类、方法、变量、实例化和对象的概念,python定义类和访问权限?python三大支柱封装、继承和多态-立地货...

    Python 面向对象搞懂Python类.方法.变量.实例化和对象的概念 面向对象技术简介 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.面 ...

  5. python中函数包括标准库函数吗_Python语言和标准库(第二章:函数)

    a-如何创建函数. b-给出一些指导原则,帮助思考如何创建和组织程序以使用函数. c-如何编写函数,使随后可以询问它们的工作方式和实现的功能. 2.1将程序放在单独的文件里 为了更加方便,从现在开始, ...

  6. python中标识符下划线用作开头_python python中那些双下划线开头的那些函数都是干啥用用的...

    1.写在前面 今天遇到了__slots__,,所以我就想了解下python中那些双下划线开头的那些函数都是干啥用用的,翻到了下面这篇博客,看着很全面,我只了解其中的一部分,还不敢乱下定义. 其实如果足 ...

  7. 在python中print表示的数据类型是_python之数据类型

    每一种计算机语言都有自己的数据类型,但大多数计算机语言的数据类型都基本一致,下来我们来看看python中的数据类型 int数字,运算 就是用来计算的,定义方式就是 :变量名 = 数值 方法也不多,就记 ...

  8. python中json模块博客园_python的json模块

    python的json模块 什么是序列化和反序列化? 序列化 在分布式环境下,无论是何种数据,都会以二进制序列的形式在网络上传输.序列化是一种将对象以一连串的字节描述的过程,用于解决在对对象流进行读写 ...

  9. python中组合与继承的区别_python类与对象的组合与继承

    1.把类的对象实例化放到一个新的类里面叫做类的组合,组合就是指几个横向关系的类放在一起,纵向关系的类放在一起是继承,根据实际应用场景确定.简单的说,组合用于"有一个"的场景中,继承 ...

最新文章

  1. 不允许程序员透露薪资!!!凭啥?
  2. android自定义minitype,MiniType部类以及扩展名
  3. Android Camera2 拍照(四)——对焦模式
  4. 版本控制工具(CVS、SVN、GIT)简介
  5. 跟着编程之美学算法——最长递增子序列(转)
  6. 思迅账套数据库软件修复,思迅软件数据库置疑
  7. RK3328 中文介绍
  8. HTML导航条和翻页栏
  9. aaas的主题--智能制造
  10. 记事正文 - QQ邮箱
  11. Elasticsearch rest-high-level-client 基本操作
  12. psvm怎么补全_vi/vim使用进阶: 自动补全
  13. win10修改账户名称
  14. 移动页面input手机键盘中的“搜索”按键
  15. java response 输出word_如何使用java代码导出word
  16. mysql2004报错_mysqlbinlog备份时候报错Sanity check failed
  17. c#ATM之功能篇(存钱,取钱,转账,交易明细)完结篇
  18. linux系统nc命令使用
  19. python弹窗tkinter弹窗
  20. (0101)iOS开发之iPad模拟器如何实现分屏模式调试

热门文章

  1. 【转】应用架构一团糟?如何将单体应用改造为微服务
  2. spartan6不能直接把时钟连到IO上
  3. GotFocus和PreviewLeftButtonDown事件
  4. spring-boot注解详解(三)
  5. 跨域资源共享CORS详解
  6. 前端后台管理系统梳理
  7. 生成验证码的流程分析.
  8. 简单实现仿某宝地址选择三级联动样式
  9. ionic tab显示到顶部去了
  10. 对“粘连”footer布局的思考和总结