在UserDict.py中更改复制功能的原因是什么

时间:2014-10-27 07:16:22

标签: python module

由此定义的

copy函数:

def copy(self):
    if self.__class__ is UserDict:
        return UserDict(self.data.copy())
    import copy
    data = self.data
    //why use try? use return copy.copy(self) instead
    try:
        self.data = {}
        c = copy.copy(self)
    finally:
        self.data = data
    c.update(self)
    return c

为什么try-finally在这里使用? self.data会先被清除吗?什么是将在这里提出的例外?

1 个答案:

答案 0 :(得分:0)

如果忽略try / except,则代码为::

data = self.data
self.data = {}
c = copy.copy(self)
self.data = data
c.update(self)

请注意self.data = {}行。出于某种原因,编写此代码的人认为如果在调用self.data之前将copy.copy()设置为空字典,则副本将更好地工作,然后使用{{1}复制实际数据}。

update()的要点是确保finally恢复到原始值,无论self.data中发生什么。