2010-03-16 4 views
1

Supposons que j'ai créé deux objets de la classe foo et que je souhaite maintenant combiner les deux. Comment, si possible, puis-je accomplir cela dans une fonction comme ceci:Suppression d'un objet dans la fonction

def combine(first, second): 
    first.value += second.value 
    del second #this doesn't work, though first.value *does* get changed 

au lieu de faire quelque chose comme

def combine(first, second): 
    first.value += second.value 

dans la fonction et de mettre del second immédiatement après l'appel de fonction?

+2

Quand vous dites, "ça ne marche pas", que voulez-vous dire? Il semble qu'il y ait un effet du 'del' que vous attendez et que vous ne voyez pas. –

+0

Je voulais dire qu'il ne supprime pas l'objet une fois que je quitte la fonction 'combiner' – wrongusername

+1

Comment pouvez-vous savoir que l'objet n'a pas été supprimé? –

Répondre

4

Non Tous les del contre les noms sont déliés. Cela supprime uniquement la référence locale. L'objet sera détruit quand il n'y a aucune référence nulle part, ou toutes les références sont dans une boucle de référence.

+0

Les objets seront détruits entre la dernière fois que vous pourrez y accéder et la fin du programme. Dans CPython, la plupart des objets sont immédiatement détruits et les cycles sont détruits périodiquement (à l'exception des cycles d'objets définis avec '__del__'). Bien sûr, il y a peu de bonnes raisons d'utiliser des cycles de référence et moins de raisons pour définir '__del__'. –

Questions connexes