python中变量名存储在哪里_python – 如何在内部存储和映射变量名称?
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.
這也是它內(nèi)部工作的方式.在CPython中,變量名和它們指向的對(duì)象通常存儲(chǔ)在Python字典中;編寫(xiě)Python代碼時(shí)可以使用的相同數(shù)據(jù)結(jié)構(gòu).
當(dāng)你寫(xiě)x = 5時(shí),名字x被設(shè)置為全局名稱(chēng)字典中的一個(gè)鍵,其中5為相應(yīng)的值.您可以使用globals()函數(shù)返回并檢查此字典,該函數(shù)提供當(dāng)前作用域命名空間的內(nèi)容.
所以你的名字x占據(jù)空間也是正確的.它作為字符串存在于內(nèi)存中,而Python則為字典的鍵保留對(duì)它的引用.
如果你想更深入地了解CPython源代碼以查看x被分配給值5的位置,你可以查看ceval.c.寫(xiě)入x = 5會(huì)觸發(fā)LOAD_CONST操作碼(將整數(shù)5放入堆棧)以及STORE_GLOBAL操作碼*(將名稱(chēng)x設(shè)置為字典中的鍵,值為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();
}
您可以看到對(duì)PyDict_SetItem的調(diào)用以更新全局字典.
*如果檢查x = 5生成的字節(jié)碼(例如使用dis),您可能會(huì)看到使用的STORE_NAME操作碼.此操作碼以相同的方式起作用(有關(guān)簡(jiǎn)要說(shuō)明,請(qǐng)參閱here).
總結(jié)
以上是生活随笔為你收集整理的python中变量名存储在哪里_python – 如何在内部存储和映射变量名称?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 如何将word文档转换成txt记事本格式
- 下一篇: python函数参数类型及顺序_pyth