博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python学习---变量内存机制
阅读量:4229 次
发布时间:2019-05-26

本文共 642 字,大约阅读时间需要 2 分钟。

python学习—变量内存机制

在学习python的身份运算符is,is not 时,发现这个运算符跟效果*id()==id()*是一样的。那么,就运行一下代码

a = 12b = 12if a is b:    print("a,b具有相同标识符")else:    print("a,b没有相同标识符")if id(a) == id(b):    print("a,b具有相同标识符")else:    print("a,b没有相同标识符")

运行结果

运行结果

这个时候学C++/C出身的筒子们就疑惑了,明明是两个变量,咋就id都一样了呢?是不是python为了提高内存利用效率重用了对象内存呢?

回顾一下python教程中关于变量的解释

不需要预先声明变量的类型,变量的类型和值在赋值的那一刻被初始化(声明和定义的过程一起完成) 在python中, 每一个变量在内存中创建,我们可以通过变量来查看内存中的值

这里是不是很熟悉,跟c中的指针一样啊(访问内存中的值)

再用代码验证一下

a = 12b = 13print(id(a))print(id(b))b = 12print(id(a))print(id(b))

运行结果

这里写图片描述

经过代码验证基本可以得出结论:

  • Python下的变量与C下的指针概念相同;
  • Python下变量的改变不是值得变,而是指向的内存地址的变化, 即换了一个内存地址,但原内存地址所在的值没有改变;
  • C下的变量的改变,是变量值得改变,而保存变量所在的内存地址固定不变;
你可能感兴趣的文章
strtol的用法
查看>>
工作队列的使用
查看>>
让vim显示空格,及tab字符 vim 多行注释
查看>>
利用mmc_test.c研究mmc模块
查看>>
tasklet、wait_queue、completion、work_queue用法总结
查看>>
int (*func(int)) (int *,int)
查看>>
在Ubuntu上下载、编译和安装Android最新内核源代码(Linux Kernel
查看>>
Linux内核同步机制API函数:宏:spin_lock_init ( )
查看>>
driver_register 理解
查看>>
copy_from_user && copy_to_user
查看>>
device_register
查看>>
Android上C++对象的自动回收机制分析
查看>>
从spin_lock到spin_lock_irqsave
查看>>
sdio 驱动
查看>>
T-SQL中的聚合函数中的SUM()函数与AVG函数()
查看>>
T-SQL中的聚合函数(二)
查看>>
分组查询
查看>>
2021-06-04
查看>>
最长无重复子数组
查看>>
Dual-Primal Graph Convolutional Networks 对偶-原始图卷积神经网络
查看>>