美文网首页python
python List乘法 注意事项

python List乘法 注意事项

作者: JerryLoveCoding | 来源:发表于2019-04-22 11:32 被阅读0次

    List的确可以使用乘法:
    如下:

    a =[0]*4
    print(a)
    a[1]=1
    print(a)
    #结果:
    #[0, 0, 0, 0]
    #[0, 1, 0, 0]
    

    但是当使用list里嵌套一个字典的时候:

    a1 =[{"a" : 1}]*4
    a1[1]["a"]=2
    print(a1)
    #结果:
    #[{'a': 2}, {'a': 2}, {'a': 2}, {'a': 2}]
    

    我们可以看到,这里列表里所有元素的值都改变了!
    *操作符在实现上是复制了值的引用,而不是创建了新的对象。所以上述的list里面,是4个指向同一个dict对象的引用。
    *操作符对于不可变对象(比如int值)很安全,但对于可变对象(字典),可能就不是你期望的结果了。因为不可变对象是复制值,而可变对象是复制引用。
    所以这里我们最好使用另一种方法达到这个效果:

    a1 =[{"a" : 1}]*4
    b1 =[{"a" : 1} for _ in range(4)]#_也可以是i之类的。。。反正是个临时变量
    a1[1]["a"]=2
    b1[1]["a"]=2
    print(a1)
    print(b1)
    #结果
    #[{'a': 2}, {'a': 2}, {'a': 2}, {'a': 2}]
    #[{'a': 1}, {'a': 2}, {'a': 1}, {'a': 1}]
    

    相关文章

      网友评论

        本文标题:python List乘法 注意事项

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