面试常问问题——python中

列表和元组的相同点和区别

不同点:

1、列表可以被修改,元组定义完成后不可以被修改

2、元组不可以被修改,但如果是元组里嵌套了一个list,list可以被修改

相同点:

1、可以容纳多个元素

2、可以完成元素混装,容纳多个类型的元素

3、数据是有序存储

4、允许重复数据存在

5、支持for循环

深拷贝和浅拷贝的区别

  浅拷贝:

  • 只复制 对象的顶层元素,嵌套对象仍然是 引用(共享内存)。

  • 修改 嵌套对象 会影响原对象

  •  

    import copy

    original = [[1, 2, 3], [4, 5, 6]]
    shallow_copied = copy.copy(original) # 浅拷贝

    # 修改顶层元素(不影响原对象)
    shallow_copied[0] = [7, 8, 9]
    print(original) # 输出 [[1, 2, 3], [4, 5, 6]](未改变)
    print(shallow_copied) # 输出 [[7, 8, 9], [4, 5, 6]]

    # 修改嵌套元素(会影响原对象!)
    shallow_copied[1][0] = 99
    print(original) # 输出 [[1, 2, 3], [99, 5, 6]](原对象被修改)
    print(shallow_copied) # 输出 [[7, 8, 9], [99, 5, 6]]

  • 修改 shallow_copied[0](顶层)不影响 original

  • 修改 shallow_copied[1][0](嵌套)会影响 original,因为它们 共享嵌套列表的引用

  深拷贝

  • 递归复制所有层级的对象,新旧对象 完全独立

  • 修改 任意层级 都不会影响原对象。

  • import copy

    original = [[1, 2, 3], [4, 5, 6]]
    deep_copied = copy.deepcopy(original) # 深拷贝

    # 修改嵌套元素(不影响原对象)
    deep_copied[1][0] = 99
    print(original) # 输出 [[1, 2, 3], [4, 5, 6]](原对象不变)
    print(deep_copied) # 输出 [[1, 2, 3], [99, 5, 6]]

  • deep_copied 是一个全新的对象,所有层级的数据都被复制,修改不会影响 original
posted @ 2024-05-19 15:02  Alieen617  阅读(168)  评论(0)    收藏  举报