Python详解:变量的存储方式

1、python中的变量的访问
变量的访问在c中有按值和按引用两种方式,但是在python中是按引用访问的变量
下面是基础变量的访问方式(包括)
例如

a=10
a="JOJO"

在内存中具体实现如下

地址数据
1000#
a88888888
1002#

10实际是保存在a指向的地址保存的数据

地址数据
88888887#
8888888810
88888889#

当运行a="JOJO"后

地址数据
1000#
a88888889
1002#
地址数据
88888887#
8888888810(待释放)
88888889JOJO

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

证明复杂数据的子数据也是保存在堆中的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值