python学习—变量内存机制
在学习python的身份运算符is,is not 时,发现这个运算符跟效果*id()==id()*是一样的。那么,就运行一下代码
a = 12
b = 12
if 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 = 12
b = 13
print(id(a))
print(id(b))
b = 12
print(id(a))
print(id(b))
运行结果
经过代码验证基本可以得出结论:
- Python下的变量与C下的指针概念相同;
- Python下变量的改变不是值得变,而是指向的内存地址的变化, 即换了一个内存地址,但原内存地址所在的值没有改变;
- C下的变量的改变,是变量值得改变,而保存变量所在的内存地址固定不变;