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上面。
这样应该好理解些吧。