Python - deepcopy() 是否会在内存中创建另一个 Class/Static 变量副本?

Python - does deepcopy() creates another copy of Class/Static variables in memory?

这几乎是我提出的另一个不太清楚的问题的转贴。

import copy

class Obj:
    a = 3

    def __init__(self, n: int):
        self.b = n

obj1 = Obj(10)

obj2 = copy.deepcopy(obj1)

我明白obj1.bobj2.b是完全不同的实例变量。我明白如果我做类似

的事情
Obj.a = 20

obj1.aobj2.a 都是 20。

现在假设 sizeof a 是 N 位。当我复制 obj1 的 a 时,内存是否在内存中存储另一个 a(浪费另外 N 位)用于 obj2.a 还是 obj2.a 只是指向相同的位置内存为 obj1.a?

编辑:在我的程序中,class 变量是一个集合、一个整数和一个元组,我想在所有副本之间共享它们而不浪费内存!

正如 Barmar 在评论中提到的那样,Python 不会复制数字等不可变对象,只要它们本身不包含可变对象即可。但是,如果 ab 是列表,

class Obj:
    a = [0, 1, 2]

    def __init__(self, n: list):
        self.b = n

obj1 = Obj([10, 20, 30])

obj2 = copy.deepcopy(obj1)
print(hex(id(obj1)), hex(id(obj1.a)), hex(id(obj1.b)))
# Output: 0x1aa036cd7c8 0x1aa03670ec8 0x1aa036eddc8
print(hex(id(obj2)), hex(id(obj2.a)), hex(id(obj2.b)))
# Output: 0x1aa036db5c8 0x1aa03670ec8 0x1aa036cf308

更多测试:

obj2.a[0] = 100
print(obj1.a)
# Output: [100, 1, 2]

所以,回答你的问题: obj1.aobj2.a 共享内存。 obj1.bobj2.b 没有。