为什么列表中的所有元素都指向循环末尾添加的最后一个元素?

2024-09-30 10:37:08 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的密码:

population= [stream_rules.StreamRules for n in range(len(buffer))]
l= [[] for n in range (len(buffer))]
for i in range(0, len(buffer)):
    length = random.randrange(2, len(buffer[i]), 1)
    split = random.randrange(1, length, 1)
    population[i].split = split
    for j in range(0, length):
        l[i].append(buffer[i][j])

    population[i].ch= l[i]


for i in range(0, len(population)):
    print(population[i].ch)

注意StreamRules是一个以chsplit作为变量的类。 我试图做的是复制列表中每一行的buffer,然后将它传递给population[i].ch

问题是当我试图在最后一个循环中打印(为了验证)时,我发现所有ch元素都指向我从buffer复制的最后一个元素。我看不出问题出在哪里。谁能帮我一下吗


Tags: in元素密码forstreamlenbufferrange
1条回答
网友
1楼 · 发布于 2024-09-30 10:37:08

您在创建population时忘记了括号-实际上并不是在创建实例。它应该是population= [stream_rules.StreamRules() for n in range(len(buffer))]。所有元素都是相同的,因为population的元素不是instaces,所以您创建了名为chsplitStreamRules的静态成员,所有类成员的静态成员都是相同的

相关问题 更多 >

    热门问题