Python3多目标赋值及共享引用注意事项
Python中多目标赋值即将等号左边所有的变量名都赋值给右边的对象,完成赋值操作,比如将三个变量同时赋值给一个字符串。
a = b = c = 'Python' print(a) print(b) print(c) 复制代码
示例结果:
Python Python Python 复制代码
在多目标赋值中,其本质即类似三个变量的指针指向了同一个内存空间,即三个变量共享了内存内同一对象。
不可变对象
对于不可变对象来说,我们在使用这些变量是不存在问题的。
a = b = c = 'Python' print(a) print(b) print(c) a = 'i like Python' b = 'Python make me happy' print(a) print(b) print(c) 复制代码
示例结果:
i like Python Python make me happy Python 复制代码
可以看到这些变量并不会互相影响。
可变对象
而对可变对象来说,比如列表,字典等,多目标赋值变量的使用便会变得棘手些。
L1 = L2 = [1, 2, 3, 4, 5] print(L1) print(L2) # 更改列表L2,从列表尾部删除一个元素 L2.pop() print(L1) print(L2) 复制代码
示例结果:
[1, 2, 3, 4, 5] [1, 2, 3, 4, 5] [1, 2, 3, 4] [1, 2, 3, 4] 复制代码
即当我们在使用多目标赋值时,需要考虑对象本身属性是否为可变对象,否则我们应该考虑对每个变量名进行单独赋值或者利用浅拷贝、深拷贝(参考上上...上节《Python列表赋值,复制,深拷贝以及5种浅拷贝详解》)等方式完成多变量的可变对象的赋值,比如我们对多变量进行分别赋值。
L1 = [1, 2, 3, 4, 5] L2 = [1, 2, 3, 4, 5] print(L1) print(L2) print(id(L1), id(L2)) L2.pop() print(L1) print(L2) 复制代码
示例结果:
[1, 2, 3, 4, 5] [1, 2, 3, 4, 5] 2600790220872 2600790206216 [1, 2, 3, 4, 5] [1, 2, 3, 4] 复制代码
“我自己是一名从事了多年开发的Python老程序员,辞职目前在做自己的Python私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的Python学习干货,从最基础的到各种框架都有整理,送给每一位喜欢Python小伙伴,想要获取的可以转发文章并关注我的头条。在后台私信我:01,即可免费获取。"
相关推荐
chuckchen 2020-10-31
Will0 2020-10-12
Dreamhome 2020-10-09
xirongxudlut 2020-09-28
星辰大海的路上 2020-09-13
chaochao 2020-08-31
猪猪侠喜欢躲猫猫 2020-08-17
快递小可 2020-08-16
shengge0 2020-07-26
巩庆奎 2020-07-21
张文倩数据库学生 2020-07-19
xirongxudlut 2020-07-18
Ericbig 2020-07-18
kyelu 2020-07-09
liangzhouqu 2020-07-07
GuoSir 2020-06-28
chaigang 2020-06-27
pythonxuexi 2020-06-25