私は、オブジェクトの新しいインスタンスを作成してオブジェクトを操作した後に、ユーザーの引数が変更されるのを避けたいと考えています。 init()メソッドの重要な引数をすぐにコピーするのが良い方法ですか、それとも良い方法がありますか?ルチアーノRamalho - - __init__.py
に対処する彼の本に例があり、私は彼と一緒にaggreeする傾斜になるだろう__init__メソッドのdeepcopyによるユーザー引数の変更は避けてください。
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
これを再現することはできません。どのバージョンのPythonを使用していますか? –
これは実践の問題ではありません。コピーする必要がある場合は、コピーする必要があります。それ以上のことはありません。 – freakish
私の意見では、コピーは通常、発信者の責任であるべきです。これは、入力の内容が変更されたかどうか気にしない(おそらく)一般的なケースでオーバーヘッドを発生させ、その責任を呼び出し側に戻すだけで回避できます。それは実用性が時には純粋さを上回り、実用的な理由でこれをやりたいのであれば、あなたがここで示唆しているものよりも良い方法ではないかもしれません。 – mgilson