未触及的整数的值在这里如何变化? [重复]

问题描述 投票:0回答:1

今天这真的让我很困惑。这是我能得到的最小工作示例:

array = [ 1, 2, 1, 3, 4 ]                                                          
n = 3                                                                              
strips = [[0] * n] * n                                                                                                                               
mSum = 7                                                                           
j = 0                                                                              
                                                                                   
strips[0][j] = mSum                                                                
                                                                                   
print(f'before strips[0]: {strips[0][0]}')                                         
                                                                                   
for i in range(1, len(array) - n + 1):                                             
    mSum += array[i + n - 1] - array[i - 1]                                        
    strips[i][j] = mSum                                                            
    print(f'strips[{i}][{j}]: {strips[i][j]}')                                     
                                                                                   
print(f'after strips[0]: {strips[0][0]}')     

如果

strips
不是嵌套列表,则不会发生该错误。这是输出:

before strips[0][0]: 7
strips[1][0]: 9
strips[2][0]: 11
after strips[0][0]: 11

为什么

strips[0][0]
在循环之前和之后不同(没有被修改)?我唯一能想到的是它与
mSum
有某种联系。

C++ 等语言中的相同代码不存在此问题。

python python-3.x list reference programming-languages
1个回答
0
投票

常用序列操作可知,s * n 相当于将 s 加自身 n 次。您创建了一个包含

n
个零的列表,然后将该列表添加到外部列表
n
次。现在您拥有了对单个列表的大量引用。

Python 的

list
就像 C++
std::list
,而不是像
int test[10][10];

© www.soinside.com 2019 - 2024. All rights reserved.