我一直在研究一些将 python(osx 上的 2.7)文件作为配置文件加载的极端案例。如果我循环运行 execfile,我想看看行为是什么。我预计会发生内存不足错误或大量交换,但当我得到不同的结果时,我感到相当惊讶。
我设置了一个测试场景如下:
'd' python 脚本:
#!/usr/bin/python
x = 0
execfile("d1")
'd1' python 脚本:
#!/usr/bin/python
x += 1
print "x = %d" % x
execfile("d2")
'd2' python 脚本:
#!/usr/bin/python
x += 1
print "x = %d" % x
execfile("d1")
结果:
$ ./d
x = 1
x = 2
x = 3
... removed for brevity ...
x = 997
x = 998
x = 999
Traceback (most recent call last):
File "./d", line 5, in <module>
execfile("d1")
File "d1", line 5, in <module>
execfile("d2")
File "d2", line 5, in <module>
execfile("d1")
... removed for brevity ...
File "d1", line 5, in <module>
execfile("d2")
File "d2", line 5, in <module>
execfile("d1")
File "d1", line 5, in <module>
execfile("d2")
KeyError: 'unknown symbol table entry'
我只是好奇是否有人可以解释这里发生了什么?为什么执行 execfile ~1000 次后它会停止?