美文网首页
11. Python对象实例化中变量的互相影响

11. Python对象实例化中变量的互相影响

作者: edwin1993 | 来源:发表于2018-06-01 09:33 被阅读0次

编程过程中发现了一个问题,问题如下:

class MyClass(object):
    def __init__(self,lis=[]):
        self.num = 0
        self.lis = lis
        
classInit1 = 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 = 0
        self.lis = []

或者,在实例化过程中出入空的list,如下:

class MyClass(object):
    def __init__(self,lis=[]):
        self.num = 0
        self.lis = lis
        
classInit1 = MyClass()
classInit1.num = 1
classInit1.lis.append(1)

classInit2 = MyClass([])
classInit2.num = 2
classInit2.lis.append(2)

推测原因为python内的变量共享机制,类似的dictionary对象、list对象包括字符串对象之间大多都是互相引用,因此导致了互相影响。
通过传入[],相当于新建了一个list传入,因此不再通过引用去使用之前所存在的。

相关文章

  • 11. Python对象实例化中变量的互相影响

    编程过程中发现了一个问题,问题如下: 实例化了自定义类MyClass的两个实例CI1 CI2,实例拥有两个自己的变...

  • python类共享变量详解

    问题: python类对象A,先实例化一个A对象的实例b,接着给A对象添加一个类共享变量xxx,再实例化一个c,请...

  • Objective-C实例变量的操作

    对象实例变量的操作 • 实例变量在初始化只做少量设置,如果在程序运行过程中需要设置我们需要对实例变量@public...

  • 【Java梳理】变量、基本数据类型

    Java是面对对象的语言,它的变量可以是局部变量、实例变量、静态变量等。实例变量是类的属性,在类实例化后保存在对象...

  • python类中的变量

    python是解释性语言,所以没有严格的变量定义,也没有私有变量的概念。实例化的对象可以添加新的属性,比如: Ca...

  • java之了解

    访问实例变量和方法 通过已创建的对象来访问成员变量和成员方法,如下所示: /* 实例化对象*/ ObjectRef...

  • 2018-02-07

    python pickle模块:python变量及对象的序列化 1、pickle.dump 将python变量...

  • 面向对象两三事

    实例和类的区别 类:a. 变量: 所有实例共享b. 对象: 属性引用类.对象、实例化 对象=类()c. 绑定属性:...

  • Dart 语法概览

    变量 在 Dart 中,未初始化的变量拥有一个默认的初始化值:null所有的变量都是对象的实例,包括整型 内置类型...

  • Python面向对象编程

    类(Class):用于描述具有相同的属性和方法的对象的集合。方法:类中定义的函数。类变量:类变量在整个实例化的对象...

网友评论

      本文标题:11. Python对象实例化中变量的互相影响

      本文链接:https://www.haomeiwen.com/subject/avekrftx.html