Decimal()对象

时间:2017-04-12 12:21:16

标签: python class decimal deep-copy

我正在努力使用deepcopy()包含Decimal值的类。所以我尝试自己深度复制一个Decimal对象,但也失败了。我在这里误解了什么?

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

类复制但小数引用保持不变。

1 个答案:

答案 0 :(得分:6)

Python的copy模块不会生成不可变对象的副本,而且效率非常低。 decimal.Decimal()个对象是不可变的,因此它们只返回self进行复制操作:

>>> from decimal import Decimal
>>> d = Decimal()
>>> d.__copy__() is d
True
>>> d.__deepcopy__({}) is d
True

请参阅decimal module documentation

  

十进制数是不可变的。

因为它们是不可变的,所以在创建副本时会有 no point ;在任何可以使用副本的地方,您都可以安全地使用原始的 ,但不会在两个完全相同的对象上浪费内存,而这些对象永远不会分歧。

相关问题