在python中发现了这一点:
class SomeClass():
def __init__(self):
pass
a = [SomeClass()]
b = copy.deepcopy(a)
输出:
^{pr2}$这和预期的一样-deepcopy为b创建了新的SomeClass()
对象
但如果
f = lambda x:x+1
a = [f]
b = copy.deepcopy(a)
我得到:
>>> a
[<function <lambda> at 0x10056e410>]
>>> b
[<function <lambda> at 0x10056e410>]
为什么deepcopy在第二种情况下不创建新的lambda实例?这是否意味着lambda函数是原子的?在
这不仅适用于lambdas,而且更普遍地适用于没有状态的函数。在
因为函数不存储状态,所以deepcopy不会为它们创建新的引用。这里记录了一个与此问题类似的有趣的话题讨论(尽管不是完全相同的问题):http://bugs.python.org/issue1515
查看222 and 223 from the source code行:
模块认为它们是原子的,我不知道如何使lambda突变。在
对于一些认为lambdas不可变的人来说,请注意以下行为:
相关问题 更多 >
编程相关推荐