首页 > 解决方案 > 将一种引用类型复制到另一种的效果

问题描述

我有两个类如下:

class foo:
        def __init__(self):
            self.val = 10

class foo2:
    def __init__(self):
        self.val = 1000

当我将类 foo 的实例复制到变量中,然后更改类 foo 的值时,变量会发生变化。这是因为 foo 是一种引用类型,并且 foo 中的每次更改也会更改其实例。

    f = foo()
    b = f 
    print(b.val)
    f.val = 20
    print(b.val)
    >> 10
    >> 20

但是如果我将类foo2复制到类foo中,变量b不会更改为 1000。对此有何解释?

f = foo2()
print(f.val)
print(b.val)

>> 1000
>> 20

标签: pythondata-structuresvalue-type

解决方案


就是这一行:

b = f

您尚未创建对象的副本,而是创建了f对同一f对象的两个不同引用。对其中任何一个的更改都会同时更改两者,因为它们是同一个对象。


推荐阅读