python_使用copy模块实现列表(list)拷贝
2018-01-04 13:48
525 查看
转载http://www.jb51.net/article/64030.htm
1.引用是指保存的值为对象的地址。在 Python 语言中,一个变量保存的值除了基本类型保存的是值外,其它都是引用,因此对于它们的使用就需要小心一些。下面举个例子:
2.问题描述:已知一个列表,求生成一个新的列表,列表元素是原列表的复制
这种做法其实并未真正生成一个新的列表,b指向的仍然是a所指向的对象。这样,如果对a或b的元素进行修改,a,b的值同时发生变化。
解决的方法为:
这样修改a对b没有影响。修改b对a没有影响。
3.但这种方法只适用于简单列表,也就是列表中的元素都是基本类型,如果列表元素还存在列表的话,这种方法就不适用了。
原因就是,像a[:]这种处理,只是将列表元素的值生成一个新的列表,如果列表元素也是一个列表,如:a=[1,[2]],那么这种复制对于元素[2]的处理只是复制[2]的引用,而并未生成 [2]的一个新的列表复制。
为了证明这一点,测试步骤如下:
可见,对a的修改影响到了b。如果解
4000
决这一问题,可以使用copy模块中的deepcopy函数。修改测试如下:
4.有时候知道这一点是非常重要的,因为可能你的确需要一个新的列表,并且对这个新的列表进行操作,同时不想影响原来的列表。
1.引用是指保存的值为对象的地址。在 Python 语言中,一个变量保存的值除了基本类型保存的是值外,其它都是引用,因此对于它们的使用就需要小心一些。下面举个例子:
2.问题描述:已知一个列表,求生成一个新的列表,列表元素是原列表的复制
>>> a= [1,2,3] >>> b =a >>> b.append(23) >>> b [1, 2, 3, 23] >>> a [1, 2, 3, 23] >>>
这种做法其实并未真正生成一个新的列表,b指向的仍然是a所指向的对象。这样,如果对a或b的元素进行修改,a,b的值同时发生变化。
解决的方法为:
>>> a=[1,2,3] >>> b=a[:] >>> b.append(23) >>> a [1, 2, 3] >>> b [1, 2, 3, 23] >>>
这样修改a对b没有影响。修改b对a没有影响。
3.但这种方法只适用于简单列表,也就是列表中的元素都是基本类型,如果列表元素还存在列表的话,这种方法就不适用了。
原因就是,像a[:]这种处理,只是将列表元素的值生成一个新的列表,如果列表元素也是一个列表,如:a=[1,[2]],那么这种复制对于元素[2]的处理只是复制[2]的引用,而并未生成 [2]的一个新的列表复制。
为了证明这一点,测试步骤如下:
>>> a=[1,[2]] >>> b=a[:] >>> b [1, [2]] >>> a[1].append(3) >>> a [1, [2, 3]] >>> b [1, [2, 3]]
可见,对a的修改影响到了b。如果解
4000
决这一问题,可以使用copy模块中的deepcopy函数。修改测试如下:
>>> import copy >>> a=[1,[2]] >>> b=copy.deepcopy(a) >>> b [1, [2]] >>> a[1].append(3) >>> a [1, [2, 3]] >>> b [1, [2]]
4.有时候知道这一点是非常重要的,因为可能你的确需要一个新的列表,并且对这个新的列表进行操作,同时不想影响原来的列表。
相关文章推荐
- Python中使用copy模块实现列表(list)拷贝
- Python中使用copy模块实现列表(list)拷贝
- Python 使用list实现简单的堆栈
- Python 使用list实现队列 (基于class, 包含迭代器)
- Python 使用list实现简单的集合set
- 在Python中操作列表之list.extend()方法的使用
- Python 列表list使用介绍
- python列表list使用实例
- Python操作列表之List.insert()方法的使用
- Python中list列表的一些进阶使用方法介绍
- Python中list列表的一些进阶使用方法介绍
- 用python实现的可以拷贝或剪切一个文件列表中的所有文件
- 在Python中操作列表之List.pop()方法的使用
- 在Python中操作列表之List.append()方法的使用
- android:使用BaseExpandableListAdapter实现可折叠的列表
- Python 使用list实现简单的map
- Python实现比较两个列表(list)范围
- android:使用BaseExpandableListAdapter实现可折叠的列表
- 在Python中操作列表之List.append()方法的使用
- 使用ExpandableListView和ExpandableListAdapter实现分组列表