python引用和复制一个对象
来源:互联网 发布:数据挖掘要学哪些东西 编辑:程序博客网 时间:2024/06/05 10:55
引用和复制一个对象
python 中,"a = b"表示的是对象 a 引用对象 b,对象 a 本身没有单独分配内存空间(重要:
不是复制!),它指向计算机中存储对象 b 的内存。因此,要想将一个对象复制为另一
个对象,不能简单地用等号操作,要使用其它的方法。如序列类的对象是(列表、元组)
c = a[:]是对 a 进行了浅拷贝(与 c = copy.copy(a) 相当),所以改变 c 时发现 a 没有受到影
响, 我们用同样的方式对 d 进行了浅拷贝,发现 e 改变的时候影响到了 a,也就是说浅
拷贝不会拷贝引用中的引用,如果想完全拷贝一份,应该用深拷贝:
import copy
e = copy.deepcopy(d) # 再尝试去改变 e 看看 a 和 c 会不会受到影响(答案是不会)
python 中,"a = b"表示的是对象 a 引用对象 b,对象 a 本身没有单独分配内存空间(重要:
不是复制!),它指向计算机中存储对象 b 的内存。因此,要想将一个对象复制为另一
个对象,不能简单地用等号操作,要使用其它的方法。如序列类的对象是(列表、元组)
要使用切片操作符(即':')来做复制:
"a = b[:]"。[建议学习相关模块:copy]
问题:字符串不是引用: a="tuweizhong";b=a 试试改变 b 的值看看 a 变不变,数组呢?
(字符串不是可变对象在改变时会重新申请内存, id(b)会发生变化)
>>> a=[1,2,3]
>>> b=a
>>> b[0]=5
>>> b
[5, 2, 3]
>>> a
[5, 2, 3]
>>> c=a[:]
>>> c[0]=999
>>> c
[999, 2, 3]
>>> a
[5, 2, 3]
>>> d=[a,c]
>>> d
[[5, 2, 3], [999, 2, 3]]
>>> e=d[:]
>>> e[0][0]=444
>>> d
[[444, 2, 3], [999, 2, 3]]
>>> e
[[444, 2, 3], [999, 2, 3]]
>>> a
[444, 2, 3]
>>> id(a)
33038744
>>> id(b)
33038744
>>>
c = a[:]是对 a 进行了浅拷贝(与 c = copy.copy(a) 相当),所以改变 c 时发现 a 没有受到影
响, 我们用同样的方式对 d 进行了浅拷贝,发现 e 改变的时候影响到了 a,也就是说浅
拷贝不会拷贝引用中的引用,如果想完全拷贝一份,应该用深拷贝:
import copy
e = copy.deepcopy(d) # 再尝试去改变 e 看看 a 和 c 会不会受到影响(答案是不会)
0 0
- python引用和复制一个对象
- python 引用和复制
- python引用和复制
- python中的引用和复制
- php中的对象引用和复制
- 【python摘录03】'引用'和复制
- Python中字典的复制和引用
- python中的对象和引用
- python 引用和对象理解
- python 引用和对象理解
- Python对象引用和del删除引用
- 【Python基本知识】 Python中,函数参数的引用和复制
- python 引用与复制
- python 参数:复制?引用?
- JavaScript如何复制一个对象或数组,而不是引用一个对象或数组。
- python对象的引用特征和可变性
- 【Python】引用和对象的理解
- [JAVA] List,对象引用,复制list和赋值
- ios隐藏uitableview下面多余的tableview的线条
- 【C】利用单链表数据结构实现通讯录,链表的增删改查
- Spring AOP 学习之cJlib动态代理
- PDF目录标签自动生成示范 《Handbook.of.Applied.Cryptography》(Alfred.J..Menezes).pdf
- 已知字符串中的单词间由单个空格隔开,实现函数,返回字符串s中出现次数最多的单词与次数组成的字符串
- python引用和复制一个对象
- C# coding-guidelines
- Android 手机壁纸(动态1)
- Linux - 延伸正则表达式
- java同步方法和同步代码块详解(通俗地讲解)
- android 中的PopupWindow错误处理
- UVa455周期串
- Android环境搭建链接整理
- 转载:eclipse的访问控制图标详解