python中的eval函数的求值...
时间:2010-08-18 来源:egg90
程序员对python的eval()内置函数褒贬不一,我在使用eval函数时 发现了这样的问题:
>>> class Foo: ... val = 1 ... >>> foo = Foo() >>> foo.val 1 >>> eval_foo = eval("foo") >>> eval_foo <__main__.Foo instance at 0x01C48080> >>> eval_foo.val = 10000 >>> foo.val 10000
而不用类的时候,传递的是值.
>>> a = 1 >>> b = eval("a") >>> b 1 >>> b = 10000 >>> b 10000 >>> a 1
以为int long float str这些类型是静态(定长)类型 在python给这些变量赋值时,在内存中也分配了确定的空间,在重新赋值后,如上面的b=10000时,其实b已经变成了另外的一个int对象..
但是如果用类的话,只是相当于获得了一个引用,所以foo eval_foo指向的是同一个对象,当然属性是一样的,一个改变另一个也会改变.
其实后来发现 这个 特性其实和eval无关..囧,,
如果不想获得一个引用 那么我们就要用到拷贝,包括浅拷贝(copy模块的copy函数)和深拷贝(copy模块中的deepcopy函数).
相关阅读 更多 +