gpt4 book ai didi

具有字典属性的 Python 对象在每次循环迭代中附加,而不是被垃圾收集

转载 作者:行者123 更新时间:2023-12-01 00:27:18 24 4
gpt4 key购买 nike

我创建了一个 Game 类,其中包含玩家的字典属性作为属性,其中应该有大约 36 个玩家。

我正在迭代一个循环,在每次迭代时创建一个 Game 对象的新实例,并将每个玩家的内容打印到 csv 文件中。

然而,尽管每次迭代都会创建一个新对象,但玩家属性似乎是被附加到而不是被垃圾收集。

sheet = open('playerGames.csv', 'w+')
gameNum = 2018020001

while gameNum < 2018020015:

game = Game(gameNum)

print(len(game.players), end=", ")

for player in game.players:
for stat in game.players[player]:
sheet.write(str(game.players[player][stat]) + ",")
sheet.write("\n")
game = None

gameNum = gameNum + 1

上面的 print 语句每次应该打印大约 36 的数字,但它输出以下 36, 72, 108, 144, 163, 199, 217, 253, 289, 325, 361, 397, 433 , 469

垃圾收集不应该清除这个吗?我添加了 game = None 语句,希望收集整个对象,但这似乎不起作用。

最佳答案

鉴于 players 被定义为全局变量,您需要在构造函数中重置,如下所示:

class Game:

def __init__(self, n):
players = dict()

在任何语言中使用全局变量都是不好的做法,请参阅 this 。如果玩家是 Game 对象的属性,您应该这样做:

class Game:

def __init__(self, n):
self.players = { } # dictionary construction expression

关于具有字典属性的 Python 对象在每次循环迭代中附加,而不是被垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58464111/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com