python变量赋值给数组_python 变量赋值,引用,初始化问题

本文深入探讨了Python中的变量赋值机制,特别是可变与不可变数据类型的差异。通过`id()`函数,解释了如何判断变量是否指向同一内存地址。示例展示了字符串(不可变类型)和列表(可变类型)在赋值和修改后的行为差异。强调了在可变对象中,如列表,操作会改变对象本身,而在不可变对象中,如字符串,操作会创建新对象。最后,讨论了动态类型如何允许变量灵活地指向不同类型的对象,这是Python的核心特性之一。
摘要由CSDN通过智能技术生成

可变数据类型,与不可变数据类型

是指向同一个内存地址的,python的赋值是只是把变量的内存地址赋值给另一个变量,这一点可以使用python的内建方法id()来进行测试,对于你给的例子:

我们假设'QH'这个字符串在内存中的地址是a,'LJQ'在内存中的地址是b

you='QH' #让you变量指向a地址

me=you #让me变量和you变量一样指向a地址

you='LJQ' #修改you变量,让它指向到b地址

print you #可想而知you指向的是b地址,所以它的值为'LJQ'

print me #me指向的是a地址,所以它的值为'QH' 输出: LJQ QH

可以使用ID来加强对python的赋值机制的理解

>>> a = 'asdf'

>>> id(a) 872552384

>>> b = a

>>> id(b) 872552384

>>> c = 'asdf'

>>> id(c) 872552384

>>> a = 'haha'

>>> id(a) 872552672

>>> id(b) 872552384

>>> a 'haha'

>>> b 'asdf'

指向同一个内存地址. 但是即使是这样说,实际上还是有两种不同的理解

python变量分两种 mutable immutable, 就是可变和不可变的意思

数字,字符串 tuple (就是“()”这种形式的数组), 这种数据类型是不可变的, 因此 你以上的程序的含义是 you 指向 'QH', me指向you指向的内容,

所以me 就指向了'QH', 然后 you指向'LJQ', 这里是you本身的值变了, 而不是you指向的对象的值变了。

you=[1]

me=you

you.append(2)

print you print me

输出 [1, 2] [1, 2]

这里, 你看到 you.append(2), 这其实是you指向的 [1]对象进行了append()操作,因此是该对象本身发生了变化([],{}以及其他大部分数据类型都是可变数据类型),

因此 me 和 you都指向同一个对象, 输出自然就是相同的。

Python中所有变量都是值的引用,也就说变量通过绑定的方式指向其值。 而这里说的不可变指的是值的不可变。 对于不可变类型的变量,如果要更改变量,则会创建一个新值,把变量绑定到新值上,而旧值如果没有被引用就等待垃圾回收。不可变的类型还有一个特性,就是可以计算其hash值,这样才能进一步作为字典的key。可变类型数据对对象操作的时候,不需要再在其他地方申请内存,只需要在此对象后面连续申请(+/-)即可,也就是它的address会保持不变,但区域会变长或者变短。

不可变类型包括:int string float tuple

可变类型包括:list dict

变量和它所指的对象的分离,就是动态类型的核心。由于变量只类似于一个指针,所以它可以随时指向一个新的对象,即使这个新的对象的类型发生了变化。

动态类型是Python的核心机制之一。可以在应用中慢慢熟悉。

总结:

变量和对象的分离,对象是内存中储存数据的实体,变量指向对象。

可变对象,不可变对象

函数值传递

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值