开发者

Python列表的浅拷贝与深拷贝

目录
  • 一、浅拷贝(均是只对第一层进行深拷贝)
    • 1.for循环依次赋值
    • 2.使用copy()函数
    • 3.使用列表生成式
    • 4.使用索引[:]
  • 二、深拷贝

    对列www.cppcns.com表深拷贝就是无论怎样改动新列表(单维or多维),原列表都不变。

    而下面的浅拷贝,对于多维列表,只是第一www.cppcns.com维深拷贝了(嵌套的List保存的是地址,复制过去的时候是把地址复制过去了),所以说其内层的list元素改变了,原列表也会变。

    一、浅拷贝(均是只对第一层进行深拷贝)

    1. for循环依次赋值

    old = [1, [1, 2, 3], 3]
    new = []
    for i in range(len(old)):
      new.append(old[i])
    new[0]编程客栈 = 3
    new[1][0] = 3
    print(old)
    print(new)
    
    '''
    [1, [3, 2, 3], 3]
    [3, [3, 2, 3], 3]
    '''

    2. 使用copy()函数

    old = [1,[1,2,3],3]
    new = old.copy()
    new[0] = 3
    new[1][0] =3
    print(old)
    print(new)

    输出:

    [1, [3, 2,www.cppcns.com 3], 3]

    [3, [3, 2, 3], 3]

    3. 使用列表生成式

    old = [1,[1,2,3],3]
    new = [i for i in old]
    
    new[0] = 3
    new[1][0] = 3
    print(old)
    print(new)

    输出:

    [1, [3, 2, 3], 3]

    [3, [3, 2, 3], 3]

    4. 使用索引 [:]

    old = [1,[1,2,3],3]
    new = old[:]
    
    new[0] = 3
    new[1][0] = 3
    print(old)
    print(new)

    输出:

    [1, [3, 2, 3], 3]

    [3, [3, 2, 3], 3]

    浅拷www.cppcns.com贝对于单层列表就是深拷贝,如:

    old = [1,2,3]
    new = old[:]
    new[0] = 666
    print(old)
    print(new)
    """
    [1, 2, 3]
    [666, 2, 3]
    """

    二、深拷贝

    使用用deepcopy()方法,才是真正的复制了一个全新的和原列表无关的:

    import copy
    old = [1,[1,2,3],3]
    new = copy.deepcopy(old)
    
    new[0] = 3
    new[1][0] = 3
    """
    [1, [1, 2, 3], 3]
    [3, [3, 2, 3], 3]
    """
    

    到此这篇关于python列表的浅拷贝与深拷贝的文章就介绍到这了,更多相关Python浅拷贝与深拷贝内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜