Python之深拷贝和浅拷贝

来源:互联网 发布:外星人灯光控制软件 编辑:程序博客网 时间:2024/06/10 03:16

**# 浅拷贝: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.csdn.net/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造成修改这是所谓的浅拷贝和深拷贝的区别欢迎大家指出错误!!!!!!
原创粉丝点击