• Python变量赋值


    在Python中,当给变量赋值时,系统会为这个值分配内存空间,然后让这个变量指向这个值;当改变变量的值时,系统会为这个新值分配另一个内存空间,然后还是让这个变量指向这个新值。

    Python的变量赋值,变量改变的是地址,不变的是内存空间中的值。变量赋值实际上是修改了值的引用,指向了新值的地址。

    当给变量赋新值后,没有任何变量指向旧值的内存空间,这个旧值的空间数据为垃圾数据,系统会自动将其删除,回收它占用的内存空间。

    Python的id()函数可以用来查看变量的内存地址。

    如:a的值改为2之后,内存地址也改变了。原值1的内存空间没有变量指向它,将被系统回收。

    # a和1的地址相同,表明a指向1
    >>> a=1
    >>> id(1)
    1536673456
    >>> id(a)
    1536673456
    
    # a改为2,地址也发生变化
    >>> a=2
    >>> id(2)
    1536673488
    >>> id(a)
    1536673488
    >>> id(1)
    1536673456
    

    由此,Python中的值互换,就可以不需要中间变量的参与,直接互换变量即可:a,b=b,a

    >>> a=1
    >>> b=2
    >>> id(a)
    1536673456
    >>> id(b)
    1536673488
    >>> a,b=b,a
    >>> a
    2
    >>> b
    1
    >>> id(a)
    1536673488
    >>> id(b)
    1536673456
    >>> id(1)
    1536673456
    >>> id(2)
    1536673488
    

    另外,为了提高内存空间的利用效率,Python对于一些数值比较小的int整型变量使用了相同的内存空间。如果数值越大,则使用的地址会不一样。

    # 1的内存地址都一样
    >>> id(1)
    1536673456
    >>> id(1)
    1536673456
    >>> id(1)
    1536673456
    >>> id(1)
    1536673456
    >>> id(1)
    1536673456
    
    # 1.0的内存地址偶尔不一样
    >>> id(1.0)
    3150552963784
    >>> id(1.0)
    3150552962128
    >>> id(1.0)
    3150552963784
    >>> id(1.0)
    3150552962128
    >>> id(1.0)
    3150552963808
    
    # 1111的内存地址多数都不一样
    >>> id(1111)
    3150591410672
    >>> id(1111)
    3150591411984
    >>> id(1111)
    3150591412496
    >>> id(1111)
    3150591410672
    >>> id(1111)
    3150591411984
    
    # 11111111111111的内存地址都不一样
    >>> id(11111111111111)
    3150591412368
    >>> id(11111111111111)
    3150591412304
    >>> id(11111111111111)
    3150591412336
    >>> id(11111111111111)
    3150591411984
    >>> id(11111111111111)
    3150591412496
    

    本文参考:
    https://blog.csdn.net/Invokar/article/details/89138684
    https://blog.csdn.net/oppo62258801/article/details/94147509

  • 相关阅读:
    Python socket 通信功能简介
    python2 && python3 的 input函数
    python 监听键盘输入
    std_msgs/String.msg
    python中string、json、bytes的转换
    python json与字典对象互相转换
    maven依赖关系中Scope的作用
    Maven项目下HttpServletRequest 或 HttpServletResponse需引用的依赖包
    Setup SS5 Socks Proxy
    Turn any Linux computer into SOCKS5 proxy in one command
  • 原文地址:https://www.cnblogs.com/gisen_6/p/15713291.html
Copyright © 2020-2023  润新知