python变量的理解_对Python变量的一些理解

Python中的变量都是对象,是对地址和内存的抽象。可以把变量当成“指针”来理解,变量存的是值的地址,不是变量本身。

举个例子: a = 2

1758985-20200423131024776-1195875416.png

变量 a 里面真实存的是2在内存中的地址,而不是2这个数值。

有了这个认识我们看一些程序:

1758985-20200423142604283-1257797237.png

1、很好理解,a = 2,b=a, b自然就等于2

2、a = 3,输出3,2也很好理解

3、按照序号1和序号2来理解输出为[2],[2]也没什么问题

4、序号4输出的是[3],[3]按照序号1和序号2来理解这里应该输出的是[3],[2]才对?

5、如果按照序号4来理解,这里的输出应该是[4],[4],为啥又变成了[4],[3]呢?

出现上面结果的原因涉及到了Python中的不可变数据类型和可变数据类型

不可变数据类型:整型int、浮点型float、字符串型string和元组tuple

可变数据类型:列表list和字典dict

两者的本质是取决于内存中的数据是否被修改

1758985-20200423150808300-113256487.png

因为a是不可变数据类型,在赋新值的时候重新分配空间,储存数值后把新的内存地址给变量a,原本的数值2并没有被改变,所以b变量里保存的地址里面的数值2没有改变。

这就就可以解释序号2的输出为什么是3,2

1758985-20200423152455884-2095391419.png

因为a是列表所以是可变数据类型,所以a的地址并没有变。a[0]修改的只是列表里面保存的不可变数据类型。

这就可以解释序号3的输出,因为a和b保存的是列表地址47349576,此列表的内容变了,a,b都会的输出都会发生变化。

a = [4]意味着a保存的列表首地址被列表[4]的首地址覆盖,而b还是保存的原来列表的首地址即47349576,所以序号5的输出不是[4],[4]。

注意:

a = [3]和b=[3]的列表地址不同,相同的只有不可变数据类型3的地址

1758985-20200423154320966-44729637.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值