本文主要是介绍Python对象实例化中变量的互相影响,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
编程过程中发现了一个问题,问题如下:
class MyClass(object):def __init__(self,lis=[]):self.num = 0self.lis = lisclassInit1 = MyClass()
classInit1.num = 1
classInit1.lis.append(1)classInit2 = MyClass()
classInit2.num = 2
classInit2.lis.append(2)
实例化了自定义类MyClass的两个实例CI1 CI2,实例拥有两个自己的变量num 和 lis
对实例各自的变量赋值取值发现实例变量lis互相影响。
通过查看id,发现两个变量中的lis是在同一内存地址。
修改类定义的方式,上述问题不再出现。
class MyClass(object):def __init__(self):self.num = 0self.lis = []
或者,在实例化过程中出入空的list,如下:
class MyClass(object):def __init__(self,lis=[]):self.num = 0self.lis = lisclassInit1 = MyClass()
classInit1.num = 1
classInit1.lis.append(1)classInit2 = MyClass([])
classInit2.num = 2
classInit2.lis.append(2)
推测原因为python内的变量共享机制,类似的dictionary对象、list对象包括字符串对象之间大多都是互相引用,因此导致了互相影响。
通过传入[],相当于新建了一个list传入,因此不再通过引用去使用之前所存在的。
作者:edwin1993
链接:https://www.jianshu.com/p/6cd2cd241271
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
这篇关于Python对象实例化中变量的互相影响的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!