


Qu'est-ce qu'une référence faible dans Python et quand devriez-vous l'utiliser?
Des références faibles existent pour permettre la référence à des objets sans empêcher leur collection de déchets, aidant à éviter les fuites de mémoire et les références circulaires. 1. Utilisez la dictionnaire faible ou la valeur faible pour les caches ou les mappages pour permettre aux objets inutilisés d'être collectés. 2. Utilisez des références faibles dans les relations d'enfant à parent pour casser les cycles et permettre aux parents d'être supprimés. 3. Utilisez une valeur faible pour la mise en cache où les entrées devraient disparaître lorsque les objets ne sont plus nécessaires ailleurs. Vérifiez toujours si une référence faible ne le renvoie pas, car l'objet peut avoir été collecté, et n'oubliez pas qu'ils ne fonctionnent qu'avec des objets qui prennent en charge le référencement faible, tels que les classes définies par l'utilisateur.
Une référence faible dans Python est une référence à un objet qui n'augmente pas le nombre de références de l'objet. Cela signifie que l'objet peut être collecté des ordures même si une référence faible existe toujours. En revanche, les références normales (fortes) gardent des objets vivants tant que ces références existent.

Pourquoi les références faibles existent
Python utilise le comptage des références dans le cadre de sa gestion de la mémoire. Lorsque le nombre de références d'un objet tombe à zéro, il est immédiatement éligible à la collecte des ordures. Mais parfois, vous voulez vous référer à un objet sans l'empêcher d'être nettoyé lorsqu'il n'est plus nécessaire ailleurs. C'est là que les références faibles entrent en jeu.
Vous créez une référence faible en utilisant le module weakref
:

Importer des faibles Classe MyClass: passer obj = myClass () Faible_ref = Filef.Ref (OBJ) print (faible_ref ()) # Renvoie l'objet s'il est toujours vivant Del Obj imprimer (faible_ref ()) # Renvoie maintenant aucun - l'objet a été collecté
Quand devriez-vous utiliser des références faibles?
1. Éviter les fuites de mémoire dans les caches ou les mappages
Si vous stockez des références à des objets dans un cache ou un dictionnaire, de fortes références peuvent involontairement maintenir des objets grands ou temporaires en vie.
Exemple: suivi des rappels ou des auditeurs

Importer des faibles # Stocker les rappels faiblement afin qu'ils n'empêchent pas le nettoyage rappels = faiblerref.weakKeyDictionary () def on_cleanup (obj): imprimer ("l'objet a disparu:", obj) obj = myClass () rappels [obj] = on_cleanup # La touche est faible - lorsque l'OBJ décède, l'entrée est supprimée Entrée del obj # supprimée automatiquement des rappels
WeakKeyDictionary
utilise des références faibles pour les clés. La WeakValueDictionary
fait de même pour les valeurs - utiles pour les caches.
2. Relations parent-enfant ou circulaires
Lorsqu'un parent tient aux enfants et que les enfants ont besoin d'une référence au parent, une forte référence dans les deux directions crée un cycle. L'utilisation d'une référence faible pour le lien d'enfant à parent évite cela.
Enfant de classe: def __init __ (self, parent): self.parent = faibleref.ref (parent) # référence faible def get_parent (self): p = self.parent () Si P n'est pas aucun: retour p autre: imprimer ("le parent a été supprimé") Renvoie aucun
Maintenant, lorsque le parent est supprimé, l'enfant ne le gardera pas en vie.
3. Cache sans ballonnement de mémoire
Vous pouvez utiliser weakref.WeakValueDictionary
pour construire un cache où les entrées disparaissent lorsque les objets ne sont plus utilisés ailleurs.
Importer des faibles _instance_cache = webref.weakValuedictionary () def get_instance (clé): obj = _instance_cache.get (key) Si OBJ n'est aucun: obj = myClass () _instance_cache [key] = obj Retour OBJ
Si aucune autre partie du programme ne contient une référence à l'instance, elle est collectée aux ordures et l'entrée de cache est automatiquement supprimée.
Points clés pour se souvenir
- Les références faibles ne sont pas toujours appropriées - elles ne le retournent
None
si l'objet a disparu, vous devez donc vérifier. - Ils travaillent uniquement avec des objets qui prennent en charge le référencement faible (la plupart des classes définies par l'utilisateur font; certains types intégrés comme
list
oudict
ne le font pas). - Utilisez
weakref.ref
,WeakKeyDictionary
,WeakValueDictionary
ouWeakSet
en fonction de votre cas d'utilisation. - Ils aident à rompre les cycles de référence et à réduire l'empreinte de la mémoire dans les applications de longue durée.
Fondamentalement, utilisez des références faibles lorsque vous devez observer ou vous référer à un objet sans interférer avec son cycle de vie . Ils sont particulièrement utiles dans les boîtes à outils GUI, les systèmes d'événements, les caches et les structures de données de type arbre avec des références arrière.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Stock Market GPT
Recherche d'investissement basée sur l'IA pour des décisions plus intelligentes

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds



Des expressions régulières sont implémentées dans Python via le module RE pour la recherche, la correspondance et la manipulation des chaînes. 1. Utilisez re.search () pour trouver la première correspondance de toute la chaîne, re.match () ne correspond qu'au début de la chaîne; 2. Utilisez des supports () pour capturer les sous-groupes correspondants, qui peuvent être nommés pour améliorer la lisibilité; 3. Re.findall () renvoie toutes les correspondances non chevauchantes, et re.finditer () renvoie l'itérateur de l'objet correspondant; 4. Re.sub () remplace le texte correspondant et prend en charge le remplacement de la fonction dynamique; 5. Les modèles communs incluent \ d, \ w, \ s, etc., vous pouvez utiliser re.ignorecase, re.multiline, re.dotall, re.

Pour déboguer une application Python distante, vous devez utiliser Debugpy et configurer le transfert de port et le mappage de chemin: Tout d'abord, installez Debugpy sur la machine distante et modifiez le code pour écouter le port 5678, transférez le port distant vers la zone locale via le tunnel SSH, puis configurez correctement les mappages de chemins locaux et de remotoot. Enfin, démarrez l'application et connectez-vous au débogueur pour réaliser le débogage de points d'arrêt distant, la vérification des variables et le pas de code. L'ensemble du processus dépend de Debugpy, de la transfert de port sécurisée et de la correspondance précise du chemin.

EnsurePythonisinstalledbyrunningpython--versionorpython3--versionintheterminal;ifnotinstalled,downloadfrompython.organdaddtoPATH.2.InSublimeText,gotoTools>BuildSystem>NewBuildSystem,replacecontentwith{"cmd":["python","-

Pour exécuter les scripts Python, vous devez configurer le système de construction de SublimeText: 1. Assurez-vous que Python est installé et disponible sur la ligne de commande; 2. Créez un nouveau système de construction dans sublimeText, entrez {"cmd": ["python", "- u", "$ file"], "file_regex": "^ [] file \" (...?) \ ", Line ([0-9] *)", "Selector": & qu

Le moyen le plus efficace de trouver des éléments communs de deux ou plusieurs listes consiste à utiliser le fonctionnement de l'intersection de l'ensemble. 1. Convertissez la liste en un ensemble et utilisez la méthode & Operator ou .Inthesection () pour trouver l'intersection, par exemple, Common = list (set (list1) & set (list2)); 2. Pour plusieurs listes, vous pouvez utiliser SET (list1) .Inthesection (set (list2), set (list3)) ou set.INTERSENET (* map (set, lists)) pour réaliser un traitement dynamique; 3. Faites attention à la déduplication désordonnée et automatique. Si vous devez maintenir l'ordre, vous pouvez traverser la liste originale et combiner le jugement défini.

ABSOLUTEIMPORTSPECIFICATIONS THE AUTREPROSS

Self-déception de la mise en forme de la classe

L'utilisation des instances au niveau du module est la plus simple et la plus conforme aux habitudes Python. En définissant des instances de classe dans des modules, en utilisant la fonctionnalité du chargement du module Python une seule fois pour garantir l'unicité globale, comme la création d'un fichier config.py et la définition d'une instance de configuration. D'autres modules partagent le même objet lors de l'importation. Cette méthode est simple, lisible et en filetage, et convient à la plupart des scénarios pratiques. De plus, il peut également être mis en œuvre en réécrivant la méthode __New__, en utilisant des décorateurs, des métaclases, etc., où la méthode __New__ contrôle l'unicité de l'instance par le biais de variables de classe, mais prête attention aux problèmes de sécurité des fils. La méthode du décorateur peut être réutilisée entre les classes mais peut affecter la collecte des ordures. La méthode métaclasse prend en charge l'héritage et le contrôle centralisé mais la réplication.
