1
Decimal値を含むクラスをdeepcopy()しようとしています。そこで私はDecimalオブジェクトを深くコピーしようとしましたが、それも失敗しました。私はここで何を誤解していますか?Decimal()オブジェクトのPython deepcopy()
from copy import deepcopy
from decimal import Decimal
## Deepcopy an array ##
a = [1,2,3,4]
b = deepcopy(a)
a is b
# False
## Deep copy a Decimal ##
a = Decimal('0.123')
b = deepcopy(a)
a is b
# True
## Deepcopy a class containing a Decimal ##
class A(object):
def __init__(self, dec):
self.myDecimal = Decimal(dec)
a = A('0.123')
b = deepcopy(a)
a is b
# False
a.myDecimal is b.myDecimal
# True
クラスはコピーされますが、10進数の参照は同じままです。
ああ、ありがとう!したがって、いずれかのコピーへの新しい割り当てによって新しいオブジェクトが作成され、もう一方の参照は引き続き古いオブジェクトを指し示します。 –
@switch_on:不変オブジェクトを含む変更可能な構造体はコピーされますが、それらの不変オブジェクトへの参照を共有するだけです。最初の例では、リストを深くコピーすると、値がすべて他のリストに含まれているものとまったく同じ整数オブジェクトへの参照である2番目のリストオブジェクトが生成されます。 –