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关于对象的复制

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