我正在努力使用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
类复制但小数引用保持不变。
答案 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 ;在任何可以使用副本的地方,您都可以安全地使用原始的 ,但不会在两个完全相同的对象上浪费内存,而这些对象永远不会分歧。