美文网首页
Python3 中对变量的测试和理解

Python3 中对变量的测试和理解

作者: Cary8292 | 来源:发表于2018-05-11 04:12 被阅读0次

    python动态类型解释型语言

    在python中
    变量:
    百度给出的定义:变量是一种使用方便的占位符,用于引用计算机内存地址。
    可以理解为临时存储数据(对象)的盒子,其存储的内容可以随时根据需求而改变,变量类型就是其指向的对象的类型,本质存储的是其指向的对象的内存地址,一旦声明一个变量则必须为其赋值,否则其没有存在的意义(解释器也会报错)。访问一个变量就是获取其指向的对象,如果存储的是地址则继续寻找。

    指向:一般我们说一个变量指向一个对象,就是变量引用了这个对象的内存地址,表示了变量就是这个对象

    引用:把一个对象B用一个变量a来指向它,以便后续的方便使用,a引用了B的地址

    浅拷贝和深拷贝
    c = [2]
    d = [1, c, 3]
    e = d
    f = copy.copy(d)
    g = copy.deepcopy(d)
    d[1][0] = 22
    print(id(d))
    print(id(e))
    print(id(f))
    print(id(g))
    print(d, e, f, g)
    print(id(d[1]))
    print(id(e[1]))
    print(id(f[1]))
    print(id(g[1]))
    结果:
    2308673597512
    2308673597512
    2308673597704
    2308673598984
    [1, [22], 3] [1, [22], 3] [1, [22], 3] [1, [2], 3]
    2308673598920
    2308673598920
    2308673598920
    2308673598856
    对于可变类型:浅拷贝重新开辟一块内存空间,将最外层的引用拿过来,深拷贝重新开辟一块内存空间,将对象的中不可变类型的引用地址拿过来
    class A(object):
    def init(self):
    self.b_list = []

    def b_append(self, b):
        self.b_list.append(b)
    

    class B(object):
    def init(self, name):
    self.name = name

    if name == 'main':
    a1 = A()
    b1 = B('123')
    b2 = B('456')
    a1.b_append(b1)
    a1.b_append(b2)
    a = a1
    b = a
    c = copy.copy(a)
    d = copy.deepcopy(a)
    b1.name = '789'
    print(a.b_list[0].name)
    print(b.b_list[0].name)
    print(c.b_list[0].name)
    print(d.b_list[0].name)

    789
    789
    789
    123

    相关文章

      网友评论

          本文标题:Python3 中对变量的测试和理解

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