1、引言
笔者在仿真一程序时,定义了分别如下两个函数:
函数一:
def make_matrix(m,n, fill = 0.0):
mat=[]
for i in range(m):
mat.append([fill]*n)
return mat
函数二:
def make_matrix(m,n, fill = 0.0):
mat=[[fill] *n]*m
return mat
发现一特别的现象,就是两个函数得到的数据格式完全一样,但是运行的结果却相差到九霄云外,于是就此问题进行分析。
(感兴趣的读者可以把博文
https://blog.youkuaiyun.com/moge19/article/details/83904608
中的代码,相应的函数替换掉对比运行结果)
2、出现问题的原因
猜想1:
数据结构不一样;
验证:否,根据打印出来的结过看数据结构是一样的;
猜想二:
函数二定义的不是浮点数;
验证:否,打印结果都是浮点数;
猜想三:
函数二定义的列表在更改数据时,其他位置的数据也一同被更改
验证:

原因:未查明,应该与函数二那样初始化列表导致得到的列表地址没有改变有关,但未找到明确说明资料
本文通过对比两个Python函数的运行结果,分析了列表在不同初始化方式下,更改数据时的差异。函数一使用循环创建独立的子列表,而函数二通过列表复制生成所有子列表,导致修改任一子列表时,其它列表也会受到影响。
2万+

被折叠的 条评论
为什么被折叠?



