对Python变量的一些理解

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

举个例子: a = 2

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

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

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

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

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

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

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

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

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

 注意:

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

猜你喜欢

转载自www.cnblogs.com/Mydream6/p/12761349.html
今日推荐