pyhonn的copy

class Application:
    def clone(self):
        print '这是浅copy'
        return copy.copy(self)

    def deepclone(self):
        print '这是深copy'
        return copy.deepcopy(self)

class B:
    age = 0

class A(Application):
    name = ''
    sex = 0
    age = None

    def __init__(self,name,sex,age = B()):
        self.name = name
        self.sex  = sex
        self.age = age

    def scanf(self,name,sex,age):
        self.name = name
        self.sex  = sex
        self.age.age = age

    def printinfo(self):
        print ('%s,%s,%s') %(self.name,self.sex,self.age.age)

def main():
    a = A('AAA',1)
    a.printinfo()

    b = a.clone()
    b.scanf('BBBBBB',11,1111)
    b.printinfo()
    a.printinfo()

    c = a.deepclone()
    c.scanf('CCCCCC',111,11111111111111111111)
    c.printinfo()
    a.printinfo()

if __name__ == '__main__':
    main()

AAA,1,0

这是浅copy

BBBBBB,11,1111

AAA,1,1111

这是深copy

AAA,1,1111

CCCCCC,111,11111111111111111111

AAA,1,1111


Python的copy常用的有 copy.copy()和copy.deepcopy.一个浅拷贝,一个深拷贝。

如上面的例子,浅拷贝时候是直接把a的成员变量都复制给b,其中b改变name和sex值得时候,a不会改变。但是当改变了b.age里面的值时候,a调用printinfo方法显示和b相同的b.age.age的值。这是浅拷贝后,ab公用相同的age对象。

c是a的深拷贝,拷贝后c和a是相同的,但是当改变c的ade.age的值时候,不会像b那样,a也会改变。因为深拷贝c会跟着a运行它之前的代码,c.age和a.age是不同的,互不影响。

你可能感兴趣的:(pyhonn的copy)