Python3多目标赋值及共享引用注意事项

作者: A遇上方知友 | 来源:发表于2019-05-27 14:28 被阅读0次

    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)

    学习Python中的小伙伴,需要学习资料的话,可以到我的微信公众号:Python学习知识圈,后台回复:“01”,即可拿Python学习资料

    更改列表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]
    复制代码

    相关文章

      网友评论

        本文标题:Python3多目标赋值及共享引用注意事项

        本文链接:https://www.haomeiwen.com/subject/hklhtctx.html