在python中产生内存问题

问题描述

我有一个问题->我想产生信息并将其放入相似的对象中。但是,似乎我将结果附加到列表后,所有内容都指向内存中的同一地址。

def call(i):
    for j in range(i):
        yield j+1

def ring(i):
    obj = {}
    for j in call(i):
        obj['number'] = j
        yield obj
    
result = []
for k in ring(5):
    print(k) if k['number'] != 5 else print(k,'\n')
    result.append(k)

[print(x) for x in result]

# - OUTPUT -
#
#{'number': 1}
#{'number': 2}
#{'number': 3}
#{'number': 4}
#{'number': 5} 
#
#{'number': 5}
#{'number': 5}
#{'number': 5}
#{'number': 5}
#{'number': 5}


我想我知道这里发生了什么。但是我不知道如何解决它,我真的需要带有正确值的列表。

预先感谢:-)

解决方法

哇...您使用的yield错误...为什么在保存列表时使用yield? ...您将其作为列表,然后丢弃

def call(i):
    for j in range(i):
        yield j+1

def ring(i):
#you define obj here
    obj = {}
    for j in call(i):
        # if you want a different object each time instance here
        # or use obj[j] = j
        obj = {}
         
        obj['number'] = j
        # yield stop execution of this function and on next iteration continue from where it's left ... your return obj which is a reference to a dict
        yield obj
    
result = []
for k in ring(5):
    # print always puts \n after each call
    print(k) if k['number'] != 5 else print(f"{k} is 5",'\n')
    result.append(k)

[print(x) for x in result]

# - OUTPUT -
#
#{'number': 1}
#{'number': 2}
#{'number': 3}
#{'number': 4}
#{'number': 5} 
#
#{'number': 5}
#{'number': 5}
#{'number': 5}
#{'number': 5}
#{'number': 5}

我不知道您是否了解C,但是简化了您的代码,如下所示:

int* x = new int[10]
other* dict = new other
for (i=0;i<5;i++)
   dict.other = i
   x[i] = dict

我的代码如下: int * x =新的int [10]

for (i=0;i<5;i++)
   other* dict = new other
   dict.other = i
   x[i] = dict