美文网首页
[[]]*3 和 [[],[],[]]有区别吗?

[[]]*3 和 [[],[],[]]有区别吗?

作者: 大象信步走来 | 来源:发表于2020-06-26 21:07 被阅读0次

    肯定有,没有,我长那么帅干嘛!---- 鸣人鸣言

    print([[]]*3)                 # [[],[],[]]
    print([[]]*3 == [[],[],[]]) # True
    

    由代码可以看出,二者的值是相等的。但是我们知道值相等并不代表二者等价。下面两段代码比较出了二者的不同。

    代码1:

    lists1 = [[],[],[]]
    print(lists1)        # [[],[],[]]
    lists1[0].append(3)
    print(lists1)        # [[3],[],[]]
    

    代码2

    lists2 = [[]]*3
    print(lists2)        # [[],[],[]]
    lists2[0].append(3)
    print(lists2)        # [[3],[3],[3]]
    

    二者的不同的原因在于:

    [[]] 是一个包含了一个空列表的单元素列表,所以 [[]] * 3 结果中的三个元素都是对这一个空列表的引用。 修改 lists 中的任何一个元素实际上都是对这一个空列表的修改。

    也就是说:[[]]* 3结果中的三个元素都引用同一个内存地址,这个内存地址上的值(value)变了,大家跟着都变。而[[],[],[]]中的每个元素各自引用一个内存地址,其中一个值给变并不影响另外两个。

    print([[]]*3 is [[],[],[]]) # False
    

    提示:is是比较对象的id,而==比较对象的值。

    相关文章

      网友评论

          本文标题:[[]]*3 和 [[],[],[]]有区别吗?

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