所有栏目 | 云社区 美国云服务器[国内云主机商]
你的位置:首页 > 云社区 » 正文

Python中,普通变量与list变量赋值操作的不同结果是因为什么?

发布时间:2020-04-12 09:00:37

资讯分类:变量  赋值  python  l2  序列  变量  的是
Python中,普通变量与list变量赋值操作的不同结果是因为什么?

变量之间是值传递,b=a相当于把a的值赋给b,而a和b是两个不同的变量,所以改变a的值不会影响b

如果一个变量中保存的是一个序列,那么实际上这个变量保存的是这个序列的内存地址,l2=l1是把l1的值赋给了l2,但是因为l1保存的是序列的地址,所以传给l2的也是序列的地址,此时两个变量同时保存了同一个序列,操作序列时,两个变量指向的序列,也就是同一个序列,都会发生改变。

Python中,普通变量与list变量赋值操作的不同结果是因为什么?

Python中变量分为可变与不可变两种类型。变量如整数型,其值不可变。如

P = 100

100不可变。P中放的是100本身。而列表变量其内容是可变的,如

L = [1, 2, 3]

其内容可以更改,例如L[1] = 4。L中存放的是值的引用。值的引用类似于房间号码,通过号码就可以对值进行操作。当列表变量赋值给另一个列表变量,进行的是把引用赋值。这时两个列表变量中的引用相同,所以对一个变量进行操作,看上去另一个变量的值也跟随变化。而普通变量赋值给另一个变量,可以等价于把值给了另一个变量,例如上面的P,如果进行如下操作

Q= P

现在Q也是有值100。如果此时对P操作

P= 200

改变的是P中的值,现在是200。数值100本身并没有更改,所以Q中的值不变。

如果要得到L的被引用的值也是可以的,进行如下操作

import copy

M = copy.copy(L)

如果L中还有列表,如

L= [1, [8,9], 5]

则要使用

M = copy.deepcopy(L)

字典变量也是可变的

留言与评论(共有 0 条评论)
   
验证码:
Top