Python关于对象的复制

不同名称指向同一对象

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