Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
防止python上的深度复制_Python_Design Patterns_Deep Copy - Fatal编程技术网

防止python上的深度复制

防止python上的深度复制,python,design-patterns,deep-copy,Python,Design Patterns,Deep Copy,问题如下:假设您有一个包含一些参数的类“p”(在python上定义),您希望将主代码传递给代码上的不同对象 是否有任何方法可以防止在主类上创建的类p的实例p通过代码被“深度复制”?(理想情况下,没有其他模块可以实例化类P的元素,例如,通过在类的实例上强制执行最多,在python上有没有一种简单的方法可以做到这一点?) 其目的是在主代码(仅)上动态更改实例p的参数,并将修改转移到整个代码中,而无需额外的手动设置。最后,我回答我自己的问题,我认为应该这样做(但如果有更具python风格和简单的方法.

问题如下:假设您有一个包含一些参数的类“p”(在python上定义),您希望将主代码传递给代码上的不同对象

是否有任何方法可以防止在主类上创建的类p的实例p通过代码被“深度复制”?(理想情况下,没有其他模块可以实例化类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