请看下面代码
class User: def __init__(self, name, hobby=[]): self.name = name self.hobby = hobby def add_hobby(self, hobby): self.hobby.append(hobby) def remove_hobby(self, hobby): self.hobby.remove(hobby) def __str__(self): return self.name + ',' + '-'.join(self.hobby) if __name__ == '__main__': u1 = User('小明') u1.add_hobby('足球') print(u1) #小明,足球 print(id(u1.hobby)) # 2074461954696 u2 = User('小强') u2.add_hobby('美女') print(u2) #小强,足球-美女 print(u1) #小明,足球-美女 print(id(u2.hobby)) # 2074461954696
分析:
我们创建了两个User对象,分别是u1,u2,但是我在修改u2的hobby属性时,却引起了u1对象hobby属性的改变
其根本原因是因为创建u1,u2对象时,并没有传hobby这个list对象, 默认就空, 而且这个空还是全局唯一的,指向了同一块内存地址. 所以修改u2也会引起u1的变化,
因此,我们在传参list时,要特殊注意.这是一个坑.
日拱一卒无有尽,功不唐捐终入海