Python中的赋值以及深复制和浅复制(深拷贝和浅拷贝)
来源:互联网 发布:welsh算法 编辑:程序博客网 时间:2024/05/18 17:55
首先看赋值:
>>> a = [1, 2, 3]>>> b = a>>> b.append(4)>>> print a, b [1, 2, 3, 4] [1, 2, 3, 4]
在Python中,变量可看做是指向内存的指针,执行a = [1, 2, 3]后,a指向这个列表,执行b = a后,b也指向这个列表(或理解为b指向a指向的列表),两个变量指向同一块内存,因此对b的操作也会影响a。
再举一例:
>>> a = 1>>> b = a>>> a = 2>>> print a,b 2 1
然后看浅复制:
>>>a = [1,2,[3,4]] >>>b = a.copy() >>>b.append(5) >>>print b[1,2,[3,4],5]>>>print a[1,2,[3,4]]
此时原列表a不受影响,再接着看:
>>>b[2].append(5) >>>print b[1,2,[3,4,5],5]>>>print a[1,2,[3,4,5]]
可以看到a和b都改变了,也就是说copy()方法返回列表的浅复制是生成一个新列表,并且把原列表中的引用也复制到新列表中。整数,实数等基本类型以及元组字符串这样的不可变类型不受此影响,但如本例中的列表内的子列表,属于可变数据类型,修改它便会影响原列表。
最后看深复制:
>>>from copy import deepcopy >>>a = [1,2,[3,4]] >>>b = deepcopy(a) >>>b[2].append(5) >>>print b[1,2,[3,4,5]]>>>print a[1,2,[3,4]]
深复制会对原列表中的元素进行递归,会把嵌套的子列表的值也复制过来,而不是只复制引用,虽然多花费了一些时间和空间,但是新列表和原列表是互相独立的,互不影响。
0 0
- Python中的赋值以及深复制和浅复制(深拷贝和浅拷贝)
- python中的复制 浅拷贝 深拷贝
- 复制对象 和 浅拷贝,深拷贝
- python的复制,深拷贝和浅拷贝
- 浅谈java中的浅拷贝(浅复制)和深拷贝(深复制)
- Python中的赋值,浅拷贝和深拷贝的区别
- js中对象的复制,浅复制(浅拷贝)和深复制(深拷贝)
- python 赋值的时候是引用,如果需要复制则需要注意深拷贝和浅拷贝的区别
- python复制,浅拷贝,深拷贝理解
- Java中的深拷贝(深复制)和浅拷贝(浅复制)
- Java中的深拷贝(深复制)和浅拷贝(浅复制)
- Java中的深拷贝(深复制)和浅拷贝(浅复制)
- Java中的深拷贝(深复制)和浅拷贝(浅复制)
- Java中的深拷贝(深复制)和浅拷贝(浅复制)
- Java中的深拷贝(深复制)和浅拷贝(浅复制)
- Java中的深拷贝(深复制)和浅拷贝(浅复制)
- Java中的深拷贝(深复制)和浅拷贝(浅复制)
- Java中的深拷贝(深复制)和浅拷贝(浅复制)
- 阿里云服务器之Tomcat环境搭建以及域名绑定
- 控件对图片的操作,改变透明度、大小、方向(学习笔记)
- HDU 5131 Song Jiang's rank list(2014亚洲区广州站现场赛)
- Codeforces Round #354 (Div. 2) D. Theseus and labyrinth(bfs)
- ubuntu14.04安装intel openCL
- Python中的赋值以及深复制和浅复制(深拷贝和浅拷贝)
- java 当中变量存储位置的区别
- 【static】---- 关键字在内存--图解
- 安卓开发——activity的一些初始化的工作,在oncreate中做还是onresume中做
- Kali Linux 秘籍 第五章 漏洞评估
- iOS单例模式
- rosserial通信协议简介
- 2016中国大学生程序设计竞赛(长春)1002 Fraction 数学
- Kali Linux 秘籍 第三章 高级测试环境