• Python中不可变类型和可变类型详解


    什么是不可变类型

    变量对应的值中的数据是不能被修改,如果修改就会生成一个新的值从而分配新的内存空间。
    # int为不可变类型
    n = 5
    print(id(n))

     140707604042688

    n+=1
    print(id(n))
    140707604042720


    b = False
    print(id(b))

    b = not b
    print(id(b))

    什么是可变类型

    列表(list)字典(dict)

    变量对应的数值中的数据可以被修改,但是内存地址保持不变

    name = ['jac','maj','asd']
    print(id(name))
    
    name.append('kjaa')
    print(id(name))

    1631174812232
    1631174812232

    字典

    stu = {'name':'jac','age':12}
    print(id(stu))
    
    
    stu.update({'sex':'boy'})
    print(id(stu))
    print(stu)

    3073182890456
    3073182890456

    为什么生成以上两种情况

    因为python中的值是通过引用(地址值)传递的

    不可变类型的值一旦被修改后会创建一个内存空间并且生成新的地址值,

    可变类型的值会在原内存空间中被修改。

     

    不可变类型执行过程分析

    i = 5
    # 开辟内存空间存放5,并且将地址赋值给i变量
    print(id(i))
    j = i
    # 将id(i)的地址赋值给j,j指向到同一个内存空间
    print(id(j))
    j+=1
    # 因为改变了j的数值,所以就麻烦了,因为j是不可变对象,所以一旦改变就会自动开阔一个新的地址空间
    print(i)
    print(j)

    图解

     可变类型执行过程和内存分析

  • 相关阅读:
    poj 2000
    poj1316
    poj1922
    poj2017
    poj1833 排列
    poj1338
    poj2136
    poj2242
    IE兼容html5标签
    绑定事件后,某些情况下需要解绑该事件
  • 原文地址:https://www.cnblogs.com/jackson669/p/13034603.html
Copyright © 2020-2023  润新知