python按值列出,而不按引用列出

发布于 2021-02-02 23:19:32

让我们举个例子

a=['help', 'copyright', 'credits', 'license']
b=a
b.append('XYZ')
b
['help', 'copyright', 'credits', 'license', 'XYZ']
a
['help', 'copyright', 'credits', 'license', 'XYZ']

我想在列表“ b”中附加值,但列表“ a”的值也已更改。
我想我不知道为什么会这样(python通过引用传递列表)。
我的问题是“如何通过值传递它,以使添加'b'不会更改'a'中的值?”

关注者
0
被浏览
86
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。
    b = a[:]
    


  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。


    要复制列表,可以使用list(a)a[:]。在这两种情况下,都会创建一个新对象。
    但是,这两种方法在可变对象的集合方面存在局限性,因为内部对象保持它们的引用完整无缺:

    >>> a = [[1,2],[3],[4]]
    
    >>> b = a[:]
    >>> c = list(a)
    
    >>> c[0].append(9)
    
    >>> a
    [[1, 2, 9], [3], [4]]
    >>> c
    [[1, 2, 9], [3], [4]]
    >>> b
    [[1, 2, 9], [3], [4]]
    >>> 
    

    如果你想要对象的完整副本,则需要copy.deepcopy

    >>> from copy import deepcopy
    >>> a = [[1,2],[3],[4]]
    
    >>> b = a[:]
    >>> c = deepcopy(a)
    
    >>> c[0].append(9)
    
    >>> a
    [[1, 2], [3], [4]]
    >>> b
    [[1, 2], [3], [4]]
    >>> c
    [[1, 2, 9], [3], [4]]
    >>> 
    

知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看