1、python中的变量的访问
变量的访问在c中有按值和按引用两种方式,但是在python中是按引用访问的变量
下面是基础变量的访问方式(包括)
例如
a=10
a="JOJO"
在内存中具体实现如下
地址 | 数据 |
---|---|
1000 | # |
a | 88888888 |
1002 | # |
10实际是保存在a指向的地址保存的数据
地址 | 数据 |
---|---|
88888887 | # |
88888888 | 10 |
88888889 | # |
当运行a="JOJO"后
地址 | 数据 |
---|---|
1000 | # |
a | 88888889 |
1002 | # |
地址 | 数据 |
---|---|
88888887 | # |
88888888 | 10(待释放) |
88888889 | JOJO |
2、关于变量存储在内存中的哪个地方
我们都知道,程序运行时,变量被拉到内存中,然而内存中有两个地方,堆与栈,那么python中的变量是怎么放的呢
堆:无序,动态大小,慢
栈:有序,静态大小,快
我们先来看看这个例子
a = "hello word"
print(id(a))
a = a+"100"
print(id(a))
输出结果
2316311065904
2316311105712
这里对字符串进行拼接可以看到,前后的a的地址值改变了,所以显然a保存的数据在栈中,因为堆的大小是可以改变的,如果是堆,a的地址不会改变
让我们看另外一个例子
b = [1,2,2]
print(id(b))
b = {'name':'lipei','age':19}
print(id(b))
b['mike'] = 8
print(id(b))
输出结果
2316310750272
2316310683328
2316310683328
从第二个输出与第三个输出可以看出,复杂类型数据保存在堆中,从第一个输出和第二个输出可看出,变量(指向堆的地址)保存在栈中。
然而还有更厉害的,请看下面例子
b = {'name':'lipei','age':19}
b['mike'] = "llllll"
print(id(b['mike']))
b['mike']+"fcdfdg"
print(id(b['mike']))
输出结果
2295016783152
2295016783152
证明复杂数据的子数据也是保存在堆中的