python中类的复制机制

b是a的拷贝,两个共用一段内存空间,按说应该b为None了 a也应该是None啊

只能说变量a和变量b指向同一个对象(print的是这个对象的地址,并不是变量本身所在的地址),通过a或者b修改的是同一个对象里的属性。

但是现在给b赋值为None,只是说b不再指向原来的对象了,但是a还是指向原来的对象。

Python中是引用传递的, 我们定义一个变量, 内存中存的是两部分, 第一个部分是 变量名与真实数据的内存地址所对应的关系, 第二个才是真实的数据

b = a, 正如你所说的拷贝, 但只是在变量名 a 原有对应的内存地址上关联了另一个变量名 b, 后面 b = None, 只是将变量名 b 重新关联了 None, 而 a 还是关联着之前的内存地址

...

变量不是数据本身,在《Fluent Python》里有这么一段解释:

不要把变量当成存储数据的箱子,而是贴在数据上的标签。

b = None  就是把标签b从Person对象上撕下来,贴到了数据None上面。

这样应该好理解些吧。