zoukankan      html  css  js  c++  java
  • python变量与地址的关系

    python变量与地址的关系

    在C语言中,系统会为每个变量分配内存空间,当改变变量的值时,改变的是内存空间中的值,变量的地址是不改变的。

    而在python中,Python采用的是基于值的管理方式。

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

    也就是说,C语言中变量变的是内存空间中的值,不变的是地址;而在Python中,变量变的是地址,不变的是内存空间中的值

    x = 12
    print(x)
    
    x = 3.14
    print(x)
    

    同时,如果没有任何变量指向内存空间的某个值,这个值称为垃圾数据,系统会自动将其删除,回收它占用的内存空间。

    同时,如果没有任何变量指向内存空间的某个值,这个值称为垃圾数据,系统会自动将其删除,回收它占用的内存空间。

    另外,我们可以使用python的id()函数来查看变量的内存地址。

    a = 2.0
    b = 2.0
    pirnt(id(a))  # 2658670250000
    pirnt(id(b))  # 2658670249968
    
    a = 2
    b = 2
    print(id(a))  # 140725523280176
    print(id(b))  # 140725523280176
    

    我们看到,当a,b都是2.0时,它们的地址不一样,说明系统为a,b分配了不同的内存空间。但是,当a,b都是2时,它们的地址是一样的,怎么回事呢?这是因为,为了提高内存空间的利用效率,对于一些比较小的整型变量(int)使用了相同的内存空间。如果数值比较大,地址就不一样了。

    a = 2
    b = 2
    print(id(a))  # 140725523280176
    print(id(b))  # 140725523280176
    
    a = 222
    b = 222
    print(id(a))  # 140725523287216
    print(id(b))  # 140725523287216
    
    a = 2222
    b = 2222
    print(id(a))  # 2658670249520
    print(id(b))  # 2658670249776
    
  • 相关阅读:
    C语言II博客作业01
    vscode使用相关配置
    Ubuntu配置教程
    编译原理复习
    误差与过拟合
    机器学习分类
    SQL语句使用详解
    CRC模2除法
    数据链路层之差错控制(检错编码和纠错编码)->(奇偶校验码、CRC循环冗余码、海明码)
    封装成帧、帧定界、帧同步、透明传输(字符计数法、字符串的首尾填充法、零比特填充的首尾标志法、违规编码法)
  • 原文地址:https://www.cnblogs.com/pankypan/p/13669817.html
Copyright © 2011-2022 走看看