Python之深拷贝和浅拷贝

本文详细解析了Python中的浅拷贝与深拷贝的概念及应用,通过实例展示了两者之间的区别,包括如何使用.copy()方法实现浅拷贝以及利用copy模块实现深拷贝。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

**# 浅拷贝:python所执行的复制动作中,如果是基本类型的数据(数字,字符串),就在内存中重新见一个窝,如果不是基本数据类型(列表,元祖,字典),就不用重新建窝即可,而是标签引用原来的窝。
# .copy()则是浅拷贝
# 深拷贝:所执行的复制的动作中,无论是基本数据类型,还是复杂数据类型 都会建一个窝来存储复制“对象的内容*

    # = 复制
    x = {"name":"qiswe","lang":["python","java","c"]}
    y = x
    #id(x) = 66983424
    #id(y) = 66983424
    #x和y对象所引用是一个对象 所谓的假拷贝

    # 浅拷贝 .copy()函数 复制
    x = {"name":"qiswe","lang":["python","java","c"]}
    y = x.copy()
    #id(x) = 67022784
    #id(y) = 72002800
    # 这次得到y与原来的x是不同的,他在内存中开辟了一个空间。
    y["name"] = "qisse"
    print(y)
    {'name': 'qisse', 'lang': ['python', 'java', 'c']} 
    id(y["name"])
    72008736
    print(x)
    {'name': 'qiswe', 'lang': ['python', 'java', 'c']} 
    id(x["name"])
    72010016
    # y进行的修改不会对x有影响
    # 注:
    y["lang"].append("c++")
    print(y)
    {'name': 'qisse', 'lang': ['python', 'java', 'c', 'c++']}
    print(x)
    {'name': 'qiswe', 'lang': ['python', 'java', 'c', 'c++']}
    #修改y对象列表时会对x造成影响 ,修改字符串时不会对x产生影响
    #原因是浅拷贝是:浅拷贝 python所执行的复制动作中,如果是基本类型的数据(数字,字符串),就在内存中重新建一个窝,如果不是基本数据类型(列表,元祖,字典),就不用重新建窝即可,而是标签引用原来的窝。
    !浅拷贝分析图](http://img.blog.youkuaiyun.com/20171214145259526?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd3N4aWFvZmVpb28=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
    深拷贝: 深拷贝 所执行的复制的动作中,无论是基本数据类型,还是复杂数据类型 都会新建一个窝来存储复制对象的内容
    import copy
    x = {"name":"qiswe","lang":["python","java","c"]}
    y = copy.deepcopy(x)
    y["lang"].append("c++")
    print(y)
    {'name': 'qiswe', 'lang': ['python', 'java', 'c', 'c++']}
    print(x)
    {'name': 'qiswe', 'lang': ['python', 'java', 'c']}
    # y的修改不会对x造成修改
这是所谓的浅拷贝和深拷贝的区别

欢迎大家指出错误!!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值