begin process at 2010 09 08 23:28:30
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Python

 > 

Divers

 > 

Aide et documentation

 > 

Allocation de mémoire et référence


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Allocation de mémoire et référence

jeudi 15 juillet 2010 à 15:41:02 | Allocation de mémoire et référence

benc77

Bonjour,

je vous soumet un problème bizarre de collision de variables :
Dans le code suivant, la méthode __init__ de la classe MySemTree ne semble pas réallouer un nouvel objet à chaque appel, ce qui parait fou...

ceci est illustré par les 3 dernières lignes du code :
* on crée un arbre root
* on appelle une méthode add_branch qui prend root en parametre
* on crée un nouvel arbre dans add_branch
=> et on constate au final que c'est root qui est modifié !

J'ai pu reproduire ce bug avec python 2.7,2.6 et 2.5 compilé sous macosx.
qqun a-t-il une idée ?? pouvez-vous le reproduire ?

merci,
Be.

Code Python :

import sys

class MySemTree:
       
       def __init__(self,label,children=[]):
              self.label = label
              self.children=children
              
       def add_child(self,tree):
              self.children.append(tree)

       def dump(self,skip=3,indent=0):
              s =  self.label+'\n'
              for child in self.children:
                     print child.label
                     #s += child.dump(indent=indent+skip)
              return s

def add_branch(tree,lblist):    
       x = MySemTree(lblist[0])
       x.add_child(MySemTree('o'))
    
def yield_empty_tree():
       return MySemTree('-ROOT-')

root = yield_empty_tree()
add_branch(root,"XXX")
root.dump()


samedi 17 juillet 2010 à 02:35:56 | Re : Allocation de mémoire et référence

Chouchou182

Salut,
La valeur par défaut de la variable children de la fonction __init__ est partagée par toutes les instances de la classe. Bug ou fonctionnalité, je ne connais pas suffisamment python pour me prononcer.

Voir l'exemple ci-dessous:

Code Python :
class bug:
  def __init__(self, data=[]):
    self.data = data

  def push(self, d):
    self.data.append(d)

  def show(self):
    print ' '.join(self.data)

a = bug()
a.push('Hello')
b = bug()
b.push('World!')
c = bug([])
c.push('Seul')

a.show()
b.show()
c.show()


Remède? Supprimer ce '=[]' dans la définition de __init__.

Bonne prog,
--
Chouchou.


Cette discussion est classée dans : self, add, root, def, mysemtree


Répondre à ce message

Sujets en rapport avec ce message

matrice symétrique [ par delaval ] bonjour, je suis actuellement en train d'écrire une fonction symétrique qui renvoie True or False selon la matrice que je rentre. Voici mon code:class Comment Afficher les donnes d'une BD dans WXGRID ??? [ par medmst ] slt a tousmon probleme est .. comment afficher les donnees d'un bd dans WXGRID ???mon code-source est : pas d'erreur de compilation mé il n'affiche ri Diverses questions et precision [ par sheorogath ] Bonjour,je me remets au python mais plus serieusement cette fois ci :palors j'ai plusieurs question sur des choses sur lesquels je trouve que peux d'i [Python3.1.2] Impossible d'utiliser __init__ avec des paramètres [ par titoulaka ] bonjour, j'ai créer une classe avec deux arguments sur le constructeur, lorsque j'essaie de l'utiliser j'ai comme message d'erreur : [quote]>>> b = [Débutant] Interface Graphique à problème.... [ par legomanfish ] Bonjours à tous, Voilà j'ai un problème à la création graphique de mon projet. J'ai Glade. Le problème c'est que quand je rentre sa: if __name__ == Class [ par Mic92 ] Salut à tous Encore une question de débutant, j'ai du mal a assimiller les class... Voici un code: Je comprend qu'il ne fonctionne pas (def nouveaucli chat basique en python [ par rezuz ] bonjour, je suis en train d'essayer de programmer un chat en python, principalement dans le but d'apprendre l'utilisation des sockets et de la commun PYgtk bouton en premier plan [ par seb57sk8 ] Bonjour a tous et a toute, Je reviens a la charge pour une questionde positionnement de widget: J'utilise PYgtk et la methode fixed. j'aimerai que Tkinter, non déplacement d'un ballon incompréhensible [ par ubranov ] Bonjour, Je cherche simplement à animer un petit ballon dans une fenêtre grâce au module Tkinter. Je n'arrive vraiment pas à comprendre en quoi le co urllib2 et interface graphique [ par rezuz ] bonjour à tous. aprés avoir eu de nombreux "problemme" avec les 72 minutes de limitation vidéo de MEGAVIDEO, j'ai décidé de faire un programme qui se


Nos sponsors


Sondage...

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,499 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales