zoukankan      html  css  js  c++  java
  • 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时,要特殊注意.这是一个坑.

  • 相关阅读:
    mysql(一)
    spring
    数据库连接池
    spring jdbctemplate
    HDU-4219-Randomization?
    离线赛总结
    HDU-4507-吉哥系列故事-恨7不成妻
    HDU-1204-糖果大战
    [BZOJ1150][CTSC2007]数据备份
    二分图学习笔记
  • 原文地址:https://www.cnblogs.com/z-qinfeng/p/12041332.html
Copyright © 2011-2022 走看看