不同名称指向同一对象
以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)
小结
- 对于一个列表或者类似的序列或者其他复杂的对象,必须使用切片操作来取得拷贝。
- 对于非对象的整数来说,只需要简单的等号赋值,即可实现复制。
- 如果对象需要使用另一个名称,而不是复制,则可使用等号赋值。
网友评论