Python中避免变量共享引用:正确初始化空列表的方法
本文解析Python中`new_loss=old_loss=[]`导致的变量共享引用错误,说明两个变量将指向同一内存地址。通过对比错误写法与正确分开初始化的方式,结合代码示例展示输出差异,帮助开发者避免数据污染问题。
Python变量初始化中的引用陷阱
在Python编程中,不能直接使用`new_loss=old_loss=[]`这种写法来同时初始化两个变量。
这种写法会导致两个变量实际上指向同一个列表对象,即它们共享相同的内存地址。
正确的做法是分别独立初始化,例如写成`new_loss=[]`。
同时单独写`old_loss=[]`,确保它们拥有独立的内存空间。
代码示例与输出对比
为了验证这一行为,我们使用以下数据文件作为测试用例:
def analyze_mmr(fn):
#初始化方法一
new_loss = []
old_loss = []
#初始化方法二
new_loss = old_loss =[]
with open(fn, encoding='utf8') as f:
for line in f:
parts = line.split('=')
if parts[0] == 'new_loss':
print(parts[0])
print('add_new_loss')
new_loss.append(parts[1].strip())
elif parts[0] == 'old_loss':
old_loss.append(parts[1].strip())
else:
pass
return new_loss, old_loss
执行上述代码逻辑后:
n, o = analyze('../example.txt')
采用初始化方法一(分别初始化)的输出结果为:n=[1,2],o=[3,4]。
采用初始化方法二(共享引用)的输出结果为:n=[1,2,3,4],o=[1,2,3,4]。
测试文档内容如下:
example.txt
new_loss=1
old_loss=3
new_loss=2
old_loss=4
以上关于Python变量初始化空列表的示例解析完毕,希望能为读者提供有效的参考,也欢迎大家继续支持本站获取更多技术内容。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









