`
chensx
  • 浏览: 48821 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

python复杂对象的复制

阅读更多
在python中,当你创建一个对象并用另一个对象给它赋值的时候,这个对象和原来的对象都指向内存中的同一块内存区域,这被称作名称到对象的绑定。

对象与参考的示例1:
# filename : reference.py

animal_list1 = ['cat', 'dog', 'pig', 'fish'];
animal_list2 = animal_list1;

del animal_list1[3]; #delete fish

print 'animal_list1 :', animal_list1;
print 'animal list2 :', animal_list2;

# output is :
# animal_list1 : ['cat', 'dog', 'pig']
# animal list2 : ['cat', 'dog', 'pig']


对象与参考的示例2:
# filename : reference.py

animal_list1 = ['cat', 'dog', 'pig', 'fish'];
animal_list2 = animal_list1[:]; #slice operator

del animal_list1[3]; #delete fish

print 'animal_list1 :', animal_list1;
print 'animal list2 :', animal_list2;

# output is :
# animal_list1 : ['cat', 'dog', 'pig']
# animal list2 : ['cat', 'dog', 'pig', 'fish']


通过上面这两段代码,需要记住的是:
如果只是想用另外一个变量名来操作同一块内存区域,可以如代码1那样操作;否则复杂对象的复制必须使用切片操作来取得拷贝。
0
0
分享到:
评论
1 楼 mirguest 2011-12-07  
如果更复杂,推荐用copy中的deepcopy进行复制。
Python 2.7.2+ (default, Oct  4 2011, 20:03:08) 
[GCC 4.6.1] on linux2
Type "copyright", "credits" or "license()" for more information.
>>> a = range(10)
>>> b = range(11, 20)
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> b
[11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> c = [a, b]
>>> d = c[:]
>>> d
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [11, 12, 13, 14, 15, 16, 17, 18, 19]]
>>> d[1][3] = "99"
>>> d
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [11, 12, 13, '99', 15, 16, 17, 18, 19]]
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> b
[11, 12, 13, '99', 15, 16, 17, 18, 19]
>>> 
>>> 
>>> import copy
>>> a = range(10)
>>> b = range(11, 20)
>>> c = [a, b]
>>> d = copy.deepcopy(c)
>>> d
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [11, 12, 13, 14, 15, 16, 17, 18, 19]]
>>> d[1][3] = "99"
>>> d
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [11, 12, 13, '99', 15, 16, 17, 18, 19]]
>>> c
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [11, 12, 13, 14, 15, 16, 17, 18, 19]]
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> b
[11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> 

相关推荐

    Python语言程序设计PPT课件.zip

    组合数据类型是Python语言区别于其他高级编程语言的一大特色,通过组合数据类型,省去了其他语言各种复杂数据结构的设计,给编程人员带来了极大的方便,这也是Python流行于数据分析领域的原因之一。学习本章,要熟练...

    Python语言程序设计习题答案.zip

    组合数据类型是Python语言区别于其他高级编程语言的一大特色,通过组合数据类型,省去了其他语言各种复杂数据结构的设计,给编程人员带来了极大的方便,这也是Python流行于数据分析领域的原因之一。学习本章,要熟练...

    笨办法学python.zip

    阅读这些习题,把习题的代码精确地写出来(禁止复制和粘贴!),修正你的错误,观察程序的运行。在这个过程中,你将了解软件是如何工作的,好的程序看起来是什么样子,怎样阅读、编写、思考代码,以及如何用专业...

    像计算机科学家一样思考Python(第2版).pdf

    15.6 复制 159 15.7 调试 161 15.8 术语表 161 15.9 练习 162 第16章 类和函数 163 16.1 时间 163 16.2 纯函数 164 16.3 修改器 165 16.4 原型和计划 166 16.5 调试 167 16.6 术语表 168 16.7...

    设计模式python模版

    建造者模式(Builder):将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。 原型模式(Prototype):通过复制现有的实例来创建新的实例,而不是通过构造函数。 结构型模式(Structural ...

    设计模式中的原型模式在Python程序中的应用示例

    原型模式本质就是克隆对象,所以在对象初始化操作比较复杂的情况下,很实用,能大大降低耗时,提高性能,因为“不用重新初始化对象,而是动态地获得对象运行时的状态”。 应用特性: 需要大量的基于某个基础原型进行...

    Python json模块使用实例

    实际上JSON就是Python字典的字符串表示,但是字典作为一个复杂对象是无法直接传递,所以需要将其转换成字符串形式.转换的过程也是一种序列化过程. 用json.dumps序列化为json字符串格式 复制代码 代码如下: >>> import...

    使用Python操作Elasticsearch数据索引的教程

    Schema free:可以向服务器提交任意结构的JSON对象,Solr中使用schema.xml指定了索引结构; 多索引文件支持:使用不同的index参数就能创建另一个索引文件,Solr中需要另行配置; 分布式:Solr Cloud的配置比较...

    Python多线程编程(八):使用Event实现线程间通信

    之前的Python:使用threading模块实现多线程编程七[使用Condition实现复杂同步]我们已经初步实现了线程间通信的基本功能,但是更为通用的一种做法是使用threading.Event对象。使用threading.Event可以使一个线程等待...

    MongoDB.zip

    他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大...

    MongoDB For Windows v3.5.4.zip

    他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大...

    MongoDB For Windows v4.0

    他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大...

    MongoDB For Windows v3.5.4

    他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大...

    MongoDB图形化工具+windows安装包+Linux安装包

    它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大...

    mongodb-mongo-r2.1.0-1967-g869e8b4.tar.gz

    他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大...

    phpMoAdmin(MongoDB管理工具) v2.6.4.zip

    他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。 Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝...

    MySQL 5.1中文手冊

    10.3.11. 校对确定较为复杂的一些特殊情况 10.3.12. 校对必须适合字符集 10.3.13. 校对效果的示例 10.4. 字符集支持影响到的操作 10.4.1. 结果字符串 10.4.2. CONVERT() 10.4.3. CAST() 10.4.4. SHOW语句 10.5. ...

    matlab集成c代码-icub-hri:iCub-HRI:iCub上用于复杂HRI方案的一致框架

    因此,我们介绍了iCub-HRI库,该库为与感知(对象识别,代理跟踪,语音识别,触摸检测),对象操纵(基本和复杂的动作)和社交互动(语音合成,共同注意)相关的组件提供了便利包装)公开为C ++库,并带有针对Python...

    颜色分类leetcode-shape-detection::purple_circle:用神经网络检测抽象形状的对象

    注意:有些人联系我并告诉我他们无法复制此 repo 中的某些结果。 我找不到原因,可能是我几年前做这个项目以来依赖项之一发生了变化。 不幸的是,我没有任何关于我当时使用的确切设置的注释。 如果你发现任何东西,...

    design_patterns:多种编程语言中的设计模式理论和示例

    Builder :将复杂对象的构造与其表示分开,以便同一构造过程可以创建不同的表示。 工厂方法:定义用于创建对象的接口,但让子类确定要实例化的类。 原型:指定要使用原型实例创建的对象的种类,并通过复制此原型来...

Global site tag (gtag.js) - Google Analytics