Python关于对象的复制

作者: 上发条的树 | 来源:发表于2016-06-02 11:27 被阅读260次

不同名称指向同一对象

以list为例,简单的等号赋值,并不是复制。而是不同的名称指向同一个对象:

>>> list = ['python','java','swift','oc']
>>> mylist = list
>>> mylist
['python', 'java', 'swift', 'oc']
>>> del list[0]
>>> list
['java', 'swift', 'oc']
>>> mylist
['java', 'swift', 'oc']

删除了list的第一个元素,对应的mylist也发生变化,说明list,mylist指向同一个对象。

使用切片的方式进行复制

>>> list = ['python','java','swift','oc']
>>> mylist = list[:]
>>> mylist
['python', 'java', 'swift', 'oc']
>>> del list[0]
>>> list
['java', 'swift', 'oc']
>>> mylist
['python', 'java', 'swift', 'oc']

使用切片的方式mylist = list[:]进行复制,发现list删除第一个元素,mylist没有发生变化。说明list和mylist属于两个不同的对象。

整数的复制

对于整数来说,不属于对象的范畴,所以复制只需要进行简单的赋值即可:

>>> i = 1
>>> ii = i
>>> ii
1
>>> i = 2
>>> ii
1

ps:关于切片不熟悉的朋友,可以参考下我的另一篇文章:Python的高级特性--切片(slice)

小结

  • 对于一个列表或者类似的序列或者其他复杂的对象,必须使用切片操作来取得拷贝。
  • 对于非对象的整数来说,只需要简单的等号赋值,即可实现复制。
  • 如果对象需要使用另一个名称,而不是复制,则可使用等号赋值。

相关文章

  • Python关于对象的复制

    不同名称指向同一对象 以list为例,简单的等号赋值,并不是复制。而是不同的名称指向同一个对象: 删除了list的...

  • Python 相关

    Python copy以及其中的deepcopy可以拷贝python类对象,深度复制,对于想快速复制对象中的变量特...

  • python赋值、浅拷贝和深拷贝

    简介   python中关于对象复制有三种类型:直接赋值、浅拷贝和深拷贝,他们既有联系又有区别。在python中,...

  • Python 浅复制与深复制

    《流畅的 Python》8.3 默认做浅复制 读书笔记 复制列表对象时,如果列表对象中包含其他列表对象,那么应该复...

  • copy --- 浅层 (shallow) 和深层 (deep)

    copy --- 浅层 (shallow) 和深层 (deep) 复制操作 Python 中赋值语句不复制对象,而...

  • python 深入理解 赋值、引用、拷贝、作用域

    在 python 中赋值语句总是建立对象的引用值,而不是复制对象。因此,python 变量更像是指针,而不是数据存...

  • 关于Copy

    关于Copy 指针复制 对象复制 The exact meaning of “copy” can vary fro...

  • Day5 深拷贝和浅拷贝

    python的复制,深拷贝和浅拷贝 在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一...

  • 设计模式 -- 原型模式

    表述 (创建型模式) 用原型实例指定创建对象的种类,并通过复制这个原型创建新的对象 这里的复制指深复制 关于深...

  • Python之深浅复制

    深复制、浅复制 定义 在Python中对象的赋值其实就是对象的引用。当创建一个对象,把它赋值给另一个变量的时候,p...

网友评论

    本文标题:Python关于对象的复制

    本文链接:https://www.haomeiwen.com/subject/miqkdttx.html