python使用list.append()时后面的值会将前面的值覆盖掉

    xiaoxiao2022-07-07  178

    今天在编写专家系统的时候突然发现使用list.append(a)时,a会将list中所有值替换为a。刚开始还以为是用list存自定义对象时需要重写append函数,重写之后还是不起作用,最后发现问题如下:

    # 错误代码,只截取关键代码 RuleList = list() p = set() q = set() for i in data: p.add(value) k = Rule(no, p, q) RuleList.append(k) p.clear() q.clear()

    结果如下: 后来在网上查了资料发现:在每次循环中,list中会增加一个位置用于保存k中数据。但是p,q在循环外。虽然每次都为p,q重新赋值,但这些p,q指的是同一地址,每次赋值都会引起前面所有数据的更新。因此,正确代码应为:

    # 正确代码,只截取关键代码 RuleList = list() p = set() q = set() for i in data: p.add(value) k = Rule(no, p, q) RuleList.append(k) p.set() q.set()

    结果为:

    最新回复(0)