• python编程中的一个经典错误之list引用


     请看下面代码

    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时,要特殊注意.这是一个坑.

  • 相关阅读:
    Django form
    八月22日,django知识点总结:
    MVC其实很简单(Django框架)
    Django框架
    python实战(开发新浪微博应用)
    MySQL练习题
    MySQL练习题参考答案
    Python中用format函数格式化字符串
    harbor的nginx替换
    bash传参的使用记录
  • 原文地址:https://www.cnblogs.com/z-qinfeng/p/12041332.html
Copyright © 2020-2023  润新知