zoukankan      html  css  js  c++  java
  • Python中的深拷贝和浅拷贝

    前言:在认识深浅拷贝的时候,先了解python中的可变类型与不可变类型。 以及 python中的传参到底是传递值还是传递引用(内存地址)

    1. python中的可变数据类型主要有 :(列表,字典) 指的是在内存地址(id)不变的情况下,可变数据类型的‘值’是可以发生改变的,如果可变类型是 +=, append等这种操作的话只是改变了变量的值,而不会新建一个对象,还是指向的原来地址。 一句话(数据类型存储中的值是可以发生改变的)

    2. python中的不可变数据类型: 数组、字符串、元祖。 指的是内存中存储的值是不可以发生改变的。如果值发生了改变的话,那么内存中存储的地址也会改变,就会指向一个新的对象。

    栗子:

    demo_list = [1, 2, 3]
    
    print(id(demo_list))   # 4365767056
    print(id(demo_list))   # 4365767056
    
    demo_list.append(4)  # 添加元素
    print(id(demo_list))   # 4365767056
    
    print("-----不可变------")
    
    demo_tuple = (1, 2, 3)
    print(id(demo_tuple))   # 4365589232
    
    demo_tuple = (1, 2, 3, 4)
    print(id(demo_tuple))   # 4365281201
    
    1. python中的传参到底是传递值还是传递引用(内存地址)
      • python中的可变对象(字典,列表)传递的是引用(内存地址)
      • python中的不可变对象(字符串,数组,元祖)传递的是指值传递,也就是意味源对象时不能被修改的

    1 深拷贝VS浅拷贝

    浅拷贝 是对一个对象最顶层的拷贝,拷贝引用。 浅拷贝对可变类型会进行浅拷贝(拷贝一个对象的引用)。

    对于不可变数据类型是对指向(对象资源的拷贝)只拷贝对象的数据内容。深拷贝有独立的内存地址

    深拷贝:是对一个对象完全的拷贝(递归) 说白了就是拷贝对象的内部,不会拷贝对象的引用,各自有独立的内存地址

    举个栗子:

    浅拷贝就是拷贝电影名,深拷贝就是拷贝电影名指向的数据(即可以看的电影)

    # list = [11, 22, 33]
    # list1 = copy.copy(list)  # 顶层拷贝-浅拷贝
    # list.append(44)
    # print(list)  # 结果为:([11,22,33,44])
    # print(list1)  # 结果为:([11,22,33])
    
    list = [11, 22, 33]
    list2 = copy.deepcopy(list)  # 深拷贝,拷贝内容,有独立的内存地址
    list.append(55)
    print(list)  # 结果为:([11,22,33,55])
    print(list2)  # 结果为:([11,22,33])
    
    
    # tuple = (11, 22, 33)
    # tuple1 = copy.copy(tuple)  # 浅拷贝,拷贝不可变类型,仅仅是指向
    # print(tuple)  # 结果为: (11,22,333)
    # print(tuple1)  # 结果为: (11,22,33)
    # print(id(tuple) == id(tuple1))  # 结果为 (True)
    
  • 相关阅读:
    判断一棵二叉树是否为二叉搜索树
    分离链接法的删除操作函数
    线性探测法的查找函数
    Bzoj1251 序列终结者
    POJ2396 Budget
    Bzoj3531: [Sdoi2014]旅行
    Codeforces Round #389 Div.2 E. Santa Claus and Tangerines
    Codeforces Round #389 Div.2 D. Santa Claus and a Palindrome
    Codeforces Round #389 Div.2 C. Santa Claus and Robot
    Codeforces Round #389 Div.2 B. Santa Claus and Keyboard Check
  • 原文地址:https://www.cnblogs.com/kongguanghua/p/13246533.html
Copyright © 2011-2022 走看看