防止python上的深度复制
问题如下:假设您有一个包含一些参数的类“p”(在python上定义),您希望将主代码传递给代码上的不同对象 是否有任何方法可以防止在主类上创建的类p的实例p通过代码被“深度复制”?(理想情况下,没有其他模块可以实例化类P的元素,例如,通过在类的实例上强制执行最多,在python上有没有一种简单的方法可以做到这一点?)防止python上的深度复制,python,design-patterns,deep-copy,Python,Design Patterns,Deep Copy,问题如下:假设您有一个包含一些参数的类“p”(在python上定义),您希望将主代码传递给代码上的不同对象 是否有任何方法可以防止在主类上创建的类p的实例p通过代码被“深度复制”?(理想情况下,没有其他模块可以实例化类P的元素,例如,通过在类的实例上强制执行最多,在python上有没有一种简单的方法可以做到这一点?) 其目的是在主代码(仅)上动态更改实例p的参数,并将修改转移到整个代码中,而无需额外的手动设置。最后,我回答我自己的问题,我认为应该这样做(但如果有更具python风格和简单的方法.
其目的是在主代码(仅)上动态更改实例p的参数,并将修改转移到整个代码中,而无需额外的手动设置。最后,我回答我自己的问题,我认为应该这样做(但如果有更具python风格和简单的方法..我很想知道): 包含类p的模块p
class P(object):
instance = None
nb_instance = 0
def __init__(self, **params):
assert type(self).instance is None, "no more than one instance of P is possible"
self.params = params
type(self).instance = self
type(self).nb_instance +=1
def __deepcopy__(self,el):
assert 1==0, "no deep copy of P is possible"
def __copy__(self):
assert 1==0, "no shallow copy of P is possible"
试图从类p实例化新元素的另一个模块
import p
class OtherCode(object):
def __init__(self):
self.a = 1
self.p = p.P(sigma=4.0,mu=1.0)
最后是要运行的主代码
import p,otherCode
import copy
if __name__ == '__main__':
P1 = p.P(sigma=0.1,mu=1.0)
#o =otherCode.OtherCode()
try:
P2 = copy.deepcopy(P1)
except Exception as E:
print(E)
try:
P3 = copy.copy(P1)
except Exception as E:
print(E)
try:
otherCode.OtherCode()
except Exception as E:
print(E)
P5 = P1
print("P1 is P5 {}".format(P1 is P5))
The output:
no deep copy of P is possible
no shallow copy of P is possible
no more than one instance of P is possible
P1 is P5 True