python里面用append把一个数组压到另一个数组里面,原来的数组如果再append东西,后来的数组就跟着变化的问题

在python里有一个非常烦人的问题就是给数组填充新值时,假如用append的方法,最终填充进数组的不是实际的值,而是类似于一个指针(比喻一下,和指针的差别还是很大的)如果原数组继续append数据,那么新数组也会跟着变化。就像下面这段程序:

b = []
a = ['aaaaaaa']
b.append(a)
print(b)

运行结果为:

[['aaaaaaa']]

但是如果这时候给a append新的字符串,b也会跟着改变,就像这样:

a.append('bbbbbbb')
print(b)

瞬间结果就变成了这样:

[['aaaaaaa', 'bbbbbbb']]

这是python的惰性求值机制导致的,简言之就是python会在最终需要的时候再求值,表达式不再被绑定到变量的时候立即计算出来,而是在当值被取用的时候才计算。这一方面能提高代码的运行效率,另一方面也会导致在一些特殊情景下产生预料外的运行结果。
在我的程序里遇到这个问题是因为我创建了两个变量,一个unit不断的计算新的数组,一个result不断的保存unit的值,结果每次unit添加了新值后,result的值也就跟着变化了。
我检索了网上关于这个问题的解法,结果都不太理想,直到我看到和append对应的extend函数,才找到一种解决方案。
请添加图片描述
一开始我尝试直接用extend替换append,结果发现还是有问题,extend会把结果直接合并到一起,就像这样:

c = []
a = ['aaaa']
b = ['bbbb']
c.extend(a)
c.extend(b)
print(c)

结果是:

['aaaa', 'bbbb']
#而我期望的结果是[['aaaa'], ['bbbb']]

虽然结果不理想,但是也已经很接近答案了,我尝试用一个中间变量来暂存extend的结果,完成了要实现的功能,程序类似这样:

t.extend(unit)#unit是我每次要操作的单元数组,t是中间变量
result.append(t)#result保存每次unit的结果
t = []

之后我又发现有函数其实可以直接实现对append实值的拷贝:

import copy
copy.deepcopy()

这个方法我还没尝试,下次要是遇到可以验证一下

Guess you like

Origin blog.csdn.net/weixin_42439763/article/details/121391774