Python 具有字典属性的对象被附加到每个循环迭代而不是被垃圾收集
Python object with dictionary attribute being appended to with each loop iteration rather than being garbage collected
我创建了一个游戏 class,它具有玩家的字典属性作为属性,其中应该有 ~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
我创建了一个游戏 class,它具有玩家的字典属性作为属性,其中应该有 ~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