二维列表的创建,以及深拷贝和浅拷贝的运用

  • 时间:
  • 浏览:
  • 来源:互联网

浅拷贝与深入拷贝

浅拷贝有两种方式:
1、= 等于符号用于拷贝是浅拷贝,是将原来的列表完全拷贝下来,并且当原来列表发生改变时,拷贝下来的也会发生改变

a=[1,2,[1,2]]
b=a#这里将a拷贝给b
a.append(12)
输出结果为
[1, 2, [1, 2], 12]
[1, 2, [1, 2], 12]
#可见浅拷贝的话是随着原列表的而改变而改变

2、copy的拷贝方法,拷贝父对象(即一级目录),不拷子对象(即二级目录)


```python
a=[1,2,[1,2,3]]
c=a.copy()#copy拷贝下来之后,如果原来的列表内层嵌套发生变化则copy后的列表页随之发生变化,但是外层嵌套里的元素则不会发生改变
a[2].append(4)
a.append(11)
print(a)
print(b)
输出结果为
[1, 2, [1, 2, 3, 4], 11]
[1, 2, [1, 2, 3, 4]]

3、深拷贝copy.deepcopy()这个是内外都不会发生改变

import copy#引用模块
a=[1,2,3,[1,2,3]]
b=copy.deepcopy(a)
a[3].append(5)
a.append(7)
print(a)
print(d)
输出结果为
[1, 2, 3, [1, 2, 3, 5], 7]
[1, 2, 3, [1, 2, 3]]

4、l=[[0]*n]*m这个是指将[0]n复制了m遍;这个是构建一个23的一个矩阵,可以说是python中的二维数组,列表嵌套,这是浅拷贝,随着每一行的改变就会改变其他行

a=[[0]*3]*2
print(a)

输出结果为[[0,0,0],[0,0,0]]

5、[0 for i in range(n)]这个才是创建列表,是深拷贝

a=[[0 for i in range(n)]for i in range(m)]
b=[[0]*n for i in range(m)]
#这两种办法均为深拷贝,不会随着某个元素的改变而改变
a[0][2]=3
b[0][2]=3
输出结果为
[[0,0,3,0],[0,0,0,0]]
[[0,0,3,0],[0,0,0,0]]
#就只改变指定的位置的数字

本文链接http://www.dzjqx.cn/news/show-617511.html