避免在__init__方法中通过deepcopy改变用户参数?

时间:2016-08-16 20:54:39

标签: python

我想避免在创建对象的新实例并使用该对象后更改用户参数。在这里立即复制 init ()方法中的关键参数或者有更好的解决方案是不错的做法?

这是一个具体的例子:

import copy
class Myclass:
    def __init__(self, x):
        self.x = copy.deepcopy(x)

    def change(self):
        self.x[0] += 1


>>> x = [0]
>>> C = Myclass(x)
>>> C.change()
>>> print(x)
0 

1 个答案:

答案 0 :(得分:1)

Fluent Python的作者 - 卢西亚诺·拉马霍 - 在__init__.py的“应对”一书中有一些例子,我倾向于与他结盟。

他不使用深层复制,但他只是利用你可以用另一个初始化列表。为您节省import

class MyClass:
    def __init__(self, options: list):
        self.options = list(options)    

好书;强烈推荐。