首页 > 学院 > 开发设计 > 正文

append中一直添加的是最后一个单词

2019-11-08 00:47:52
字体:
来源:转载
供稿:网友

这个问题是python入门时碰到的。当时的情况是在for循环中,首先是调用函数将结果存到全局变量layer_0,然后将layer_0的值利用append打入X中。本来希望X存储的是每次layer_0修改后的值,而在有bug的程序中,X存储的始终是多个一样的layer_0值。而该值是layer_0最后一次修改得到的。

究其原因,则是因为python函数传递的参数都是引用值,也就是内存的一个地址。如果这个内存里的值有所变动的话,之前所有使用该引用值的地方均会发生改变。

以append函数为例,由于每次加入的值X.append(layer_0)均是加的一个地址,而且每次加入的地址都是一样的。因此,里面的值是一样的,且随着layer_0值的改变而改变。

那么,如何拜托这种传递地址的影响,而直接传递地址里的值呢?答案是使用深度拷贝函数,此时,x的值与layer_0[0]不再共享同一个内存,其值相互之间不再有牵连。

#使用深度拷贝是解决问题的关键x = copy.deepcopy(layer_0[0])def covert_reviews_to_array(reviews): global layer_0 X = [] for i, sentence in enumerate(reviews): update_input_layer(sentence) #使用深度拷贝是解决问题的关键 x = copy.deepcopy(layer_0[0]) X.append(x) return X
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表