Hello, for me it seems that GroupSingle dosnt release references to the old Sprite when a new Sprite is beeing assigned.
ive attached 2 Files. pygame_memleak.py actually triggers the leak (Dont uncomment the sleep - it will eat your memory instantly!). In the second file pygame_memleak2.py i just changed GroupSingle to Group and s.sprite = ... to s.empty(); s.add( ... ) to achieve the same behaviour as GroupSingle - and this one works fine. Im using: Python 2.6.6 (r266:84292, Sep 15 2010, 16:22:56) [GCC 4.4.5] (64-Bit) Pygame 1.9.1release (The default Ubuntu 10.10 setup -but ive seen this on older Versions of Python aswell) -- Conesoft / Brose - Steinrücken GbR Ehm. Service4every1 Flemerskamp 19 a 44319 Dortmund Telefon: +49 (0) 231 / 108722231* Fax: +49 (0) 231 / 283798 E-Mail: t.steinruec...@conesoft.org Gesellschaftsform: Gesellschaft bürgerlichen Rechts Sitz: Dortmund Geschäftsführer: Roland Brose, Tobias Steinrücken USt-IdNr.: DE237763154
#!/usr/bin/python # -*- coding: utf-8 -*- import pygame from random import randrange from time import sleep class mysprite(pygame.sprite.Sprite): def __init__(self, *args, **kwargs): pygame.sprite.Sprite.__init__(self, *args, **kwargs) self.image = pygame.Surface( (800, 600) ) self.rect = self.image.get_rect() pygame.init() screen = pygame.display.set_mode( (800, 600) ) s = pygame.sprite.GroupSingle() while 1: s.sprite = mysprite() s.update() s.draw( screen ) pygame.display.flip() sleep(0.05)
#!/usr/bin/python # -*- coding: utf-8 -*- import pygame from random import randrange from time import sleep class mysprite(pygame.sprite.Sprite): def __init__(self, *args, **kwargs): pygame.sprite.Sprite.__init__(self, *args, **kwargs) self.image = pygame.Surface( (800, 600) ) self.rect = self.image.get_rect() pygame.init() screen = pygame.display.set_mode( (800, 600) ) s = pygame.sprite.Group() while 1: s.empty() s.add( mysprite() ) s.update() s.draw( screen ) pygame.display.flip() sleep(0.05)