`
chensx
  • 浏览: 49487 次
  • 性别: 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 将图片复制到系统剪贴中

    首先,Python是一种广泛使用的高级编程语言,它简洁易读,拥有强大的标准库支持,能够处理各种任务,从简单的脚本编写到复杂的软件开发。在本例中,Python被用来实现特定的功能,即将图片复制到系统剪贴板中。 为了...

    Python中的面向对象(课件)

    面向对象编程的思想在Python中得到广泛运用,尤其在处理复杂问题时,能够提高代码的可读性、可维护性和可扩展性。通过学习Python的面向对象,开发者能够更好地设计和实现具有模块化、封装和多态性的程序。在学习过程...

    python文件的复制,python文件的复制,python文件的复制,

    在Python编程语言中,文件操作是一项基础且重要的任务,其中包括文件的复制。下面将详细讲解Python如何进行文件复制,以及与之相关的知识点。 首先,Python提供了多种方式来复制文件。最简单的方法是使用内置的`...

    基于python的图像复制粘贴篡改识别软件.zip

    在图像处理和计算机视觉领域,图像识别是一项关键技术,它涵盖了从简单对象识别到复杂场景理解的广泛任务。在这个“基于python的图像复制粘贴篡改识别软件”中,我们主要探讨的是如何通过深度学习方法来检测图像中的...

    copy-浅复制-python.docx

    在Python编程中,复制对象是一项常见的操作,尤其是在处理复杂数据结构如列表、元组或字典时。Python提供了两种复制方法:浅复制和深复制。本文主要关注浅复制的概念及其在实际编程中的应用。 浅复制,又称为表面...

    Python面向对象编程

    面向对象编程是Python编程语言的核心特性之一,它允许开发者通过创建和使用类来构建复杂的软件系统。在Python中,类是动态创建的,这意味着你可以在程序运行时定义和修改类。类的实例(对象)可以绑定到多个变量,多...

    类继承与对象复制的细节.zip_类继承与对象复制的细节

    通过深入理解类继承和对象复制的细节,开发者能够更有效地设计和实现复杂的面向对象程序,提高代码的可读性、可维护性和复用性。在实践中,合理运用这些概念可以优化程序结构,减少代码冗余,提升软件质量。

    Python从Excel表中批量复制粘贴数据到新表.zip

    Python的pandas库允许我们创建DataFrame对象,这是处理表格数据的一种高效方式。使用`pd.read_excel()`函数可以从Excel文件中加载数据到DataFrame中: ```python import pandas as pd # 读取源Excel文件 source_df...

    Python编程操作3dMax网格对象.docx

    需要注意的是,Python脚本在复制和粘贴时可能会出现缩进问题,因为Python语法对缩进有严格的要求。因此,在实际操作时,需要确保代码的缩进正确无误,以避免语法错误。 总的来说,通过Python编程操作3ds Max的网格...

    Python-become使一个对象变成另一个

    3. **对象赋值**:Python中的对象赋值实际上是引用的复制,而不是值的复制。这意味着当一个对象赋值给另一个变量时,它们都指向同一个内存位置。这也可以理解为一种“变成”——两个变量现在都代表了相同的对象。 `...

    python项目实例代码源码-Python从Excel表中批量复制粘贴数据到新表.zip

    本项目实例是关于如何使用Python从Excel表格中批量复制数据并粘贴到新的Excel表中的代码源码。这个功能在数据分析、报告生成或者数据迁移等场景下非常实用。 Python提供了多种库来操作Excel文件,其中最常用的是`...

    用Python的turtle库画柯南_python画柯南_python_Turtle_画图_柯南python制作_源码

    接下来,我们需要创建一个turtle对象,这个对象将代表我们的“乌龟”。例如,我们可以将其命名为`kornan`: ```python kornan = turtle.Turtle() ``` turtle库提供了许多方法来控制乌龟的移动和绘画。例如,我们...

    Python-一个用于在多个服务器之间复制多个python类的库

    描述中提到的“一个用于在多个服务器之间复制多个python类的库”,暗示了这个库支持多类的复制,这意味着它不仅限于基础类型的数据,还能处理复杂的自定义对象,包括具有方法和属性的类实例。这使得它在处理复杂业务...

    Python程序设计【第3版】完整高清 非扫描 可复制 可搜索 书签全

    2. **面向对象编程**:Python支持面向对象编程,包括类的定义、对象的创建、继承、封装和多态等概念。理解这些概念是编写复杂程序的基础。 3. **异常处理**:Python通过try/except块处理异常,提供了一种优雅的方式...

    Python浅复制中对象生存周期实例分析

    在处理大型数据结构或复杂对象关系时,理解深复制(Deep Copy)和浅复制的区别尤其重要。深复制会创建一个全新且独立的对象,包括所有嵌套的对象,而不仅仅是顶层对象的引用。在Python中,可以使用`copy.deepcopy()`...

    Python学习手册

    5. 面向对象编程(OOP):Python支持面向对象的编程范式,理解类(class)、对象(object)、继承(inheritance)、封装(encapsulation)、多态(polymorphism)等概念,能够帮助开发者构建更复杂、可维护的软件系统。...

    python草莓熊代码.pdf

    在Python编程语言中,turtle库是一个非常有趣且实用的模块,它主要用于教育目的,帮助初学者学习图形绘制。在这个例子中,我们看到...通过不断实践和探索,我们可以利用turtle库绘制更复杂的图案,甚至创建简单的游戏。

    植物大战僵尸1.0 python代码

    虽然Python自带的图形库可能功能有限,但可以与其他库如pygame结合,实现音频播放和更复杂的图形渲染。通过加载图片资源和播放音频文件,游戏可以提供丰富的视听体验。 总结来说,《植物大战僵尸1.0 Python代码》是...

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

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

Global site tag (gtag.js) - Google Analytics