Python:如何跟踪值原点

时间:2013-08-04 12:04:15

标签: python garbage-collection inspect

您对跟踪价值来源有何看法,具体情况如下:

presets.py

from handler import store_values

A = True
B = True
C = False
D = 42

store_values([A, B, C, D])
来自 handler.py

store_values 应该可靠地确定第一个 True 是用 A = True 定义的,第二个 True 来自 B = True

关于什么不会做的一些想法,似乎:

  1. value id()+ frames'.f_locals检查相同的ID;
  2. 堆栈检查+源代码行解析+模块dict遍历;
  3. gc值引用遍历检查。

1 个答案:

答案 0 :(得分:1)

不要传递值,尝试从值到名称不仅复杂而且脆弱,而且还有hacky和混乱。传递他们的名字,以及识别名称空间的某种方式。例如,其中一个:

store_values(__name__, ['A', 'B', 'C', 'D'])
# look up module in sys.module, use getattr() and setattr()

store_values(globals(), ['A', 'B', 'C', 'D'])
# globals() is just a dict, so use brackets