J'ai été surpris de savoir comment enregistrer des objets avec python, qui est léger et très économe en énergie.

Histoire surprise

Lorsqu'ils sont décrits comme suit, a et b semblent pointer exactement vers le même objet (2 dans ce cas).

a = 2
b = 2

Exactement le même. * "Le même objet" * en anglais. J'avais beaucoup de questions, alors j'ai cherché. Commençons par énumérer les questions.

  1. Si vous pointez vers le même endroit et changez a, b change-t-il également?
  2. Est-ce vrai?

Question 1: N'est-il pas réécrit?

Si vous y réfléchissez, c'est ce que j'ai recherché dans l'article précédent.

Pour résumer brièvement

Si le même objet existe déjà
Reportez-vous à ce même objet pour économiser de la mémoire.

Si le même objet n'existe pas, il sera nouvellement créé.

En d'autres termes, si a = 3 est nouvellement entré, un nouvel objet sera créé. Et est-ce que `` b = 2 '' est sauvegardé tel quel?

Bien sûr, puisqu'il s'agit d'une rédaction de mémos pour débutants, des choses plus compliquées peuvent se produire dans la partie fondamentale, mais cette définition peut l'expliquer sans aucune contradiction, donc je vais procéder comme c'est pour le moment.

Question 2: Vérifiez si c'est vrai (utilisation de la fonction id)

Pour voir si c'est vrai, regardez ce qu'on appelle une adresse d'espace mémoire à l'aide de la fonction id que vous pouvez voir directement.

Comme vous pouvez le voir en examinant id (), il semble que la valeur d'identification soit utilisée comme valeur de retour. En d'autres termes, s'ils pointent vers le même objet, la valeur de retour est la même, et s'ils sont différents, la valeur de retour est également différente.

Maintenant, voyons si ça appartient vraiment à *** ensemble ***.

test.py



a = 2
b = 2

id(a) #4401166416

id(b) #4401166416

id(a) == id(b) #Vrai c'est compliqué de voir les chiffres==J'ai essayé de l'utiliser.

Apparemment, c'est probable. En d'autres termes, les règles lors de la création d'un nouvel objet seront les suivantes.

Toujours méfiant, Kan Chin a défini un nouveau `` c = 3 '' et a tenté une autre expérience.

test.py


c = 3 

id(c) #4401166448

id(a) == id(c) #False 

#Après cela, réécrivez a en 3 et vérifiez s'il est identique à c.

a = 3

id(a) #4401166448

id(a) == id(c) #True

Et sont devenus ensemble à merveille. En d'autres termes

Si le même objet existe
Aucun nouvel objet n'est créé.

On dirait. (* Certaines corrections ont été apportées au post-scriptum)

Je ne sais pas à quoi cela sert, mais le contenu est étrange et intéressant.

Postscript

De yuba

Une telle méthode de conception est appelée un modèle Flyweight (il est "fly grade" car il consomme moins de mémoire). Pour votre information.

... Apparemment ... Merci beaucoup.

shiracamus a apporté une correction dans le commentaire.

Apparemment, si la valeur est grande, un nouvel objet sera créé même si la valeur est exactement la même.

Voici ce que j'ai essayé de faire.

test



d = 50000
e = 50000

id(d) #4406088592
id(e) #4404350832

id(d) == id(e) #False


Il est étonnamment intéressant de voir comment le contenu du système est stocké.

Recommended Posts

J'ai été surpris de savoir comment enregistrer des objets avec python, qui est léger et très économe en énergie.
Comment utiliser is et == en Python
Trois choses auxquelles j'étais accro lors de l'utilisation de Python et MySQL avec Docker
[Python] Comment enregistrer des images sur le Web à la fois avec Beautiful Soup
Python> set> Convertir avec set ()> dictionary n'est que la clé> On m'a appris à convertir les valeurs du dictionnaire en set / dir ({}) / help ({}) / help ({} .valeurs)
J'ai essayé de lire et d'enregistrer automatiquement avec VOICEROID2 2
Je veux gérer l'optimisation avec python et cplex
J'ai essayé de lire et d'enregistrer automatiquement avec VOICEROID2
J'ai été surpris du fonctionnement de l'opérateur ternaire de Python
J'étais accro au grattage avec Selenium (+ Python) en 2020
J'ai été surpris de recevoir une belle critique lorsque j'ai écrit Python à CheckIO et son explication
[Python] Qu'est-ce qu'un tuple? Explique comment utiliser sans toucher et comment l'utiliser avec des exemples.
J'ai essayé de simuler la propagation de l'infection avec Python
[Python] Comment jouer avec les variables de classe avec décorateur et métaclasse
Comment gratter en quelques secondes avec le sélénium de Python
J'ai essayé de créer une interface graphique à trois yeux côte à côte avec Python et Tkinter
Comment se connecter à AtCoder avec Python et soumettre automatiquement
Faites fonctionner Jupyter avec l'API REST pour extraire et enregistrer le code Python
Je veux résoudre APG4b avec Python (seulement 4.01 et 4.04 au chapitre 4)
Comment importer des fichiers CSV et TSV dans SQLite avec Python
Ce à quoi j'étais accro avec json.dumps dans l'encodage base64 de Python
Comment créer une caméra de surveillance (caméra de sécurité) avec Opencv et Python
J'ai essayé de faire un processus d'exécution périodique avec Selenium et Python
J'ai essayé de savoir si ReDoS est possible avec Python
Comment gérer les erreurs lors de l'installation de Python et de pip avec choco
J'étais accro aux variables de classe et aux variables d'instance erronées en Python
Comment utiliser Python avec Jw_cad (Partie 1 Qu'est-ce que la transformation externe)
Comment créer un environnement d'exécution Python et Jupyter avec VSCode
Python: comment utiliser async avec
Comment démarrer avec Python
J'ai joué avec PyQt5 et Python3
Comment calculer la date avec python
Je veux déboguer avec Python
Le 16ème problème d'écriture en temps réel hors ligne a été résolu avec Python
Avec PEP8 et PEP257, un codage Python qui n'est pas gênant à montrer aux gens!
[Introduction à Python] Comment juger de l'authenticité avec l'instruction if (True et None)
Comment écrire hors ligne en temps réel J'ai essayé de résoudre E11 avec python
J'étais accro à la création d'un environnement Python venv avec VS Code
Utilisez Python de Java avec Jython. J'étais aussi accro.
Le nom du fichier était mauvais en Python et j'étais accro à l'importation
Lisez le fichier CSV avec Python et convertissez-le en DataFrame tel quel
Le 15e problème d'écriture en temps réel hors ligne a été résolu avec python
Comment écrire en temps réel hors ligne J'ai essayé de résoudre E12 avec python
L'arbre.plot_tree de scikit-learn était très simple et pratique, j'ai donc essayé de résumer comment l'utiliser facilement.
Je veux détecter des objets avec OpenCV
Comment empaqueter et distribuer des scripts Python
Comment diviser et enregistrer un DataFrame
Convertir un mémo à la fois avec Python 2to3
Comment installer et utiliser pandas_datareader [Python]
Fractal pour faire et jouer avec Python
Je voulais résoudre ABC160 avec Python
Comment utiliser BigQuery en Python
Je veux analyser les journaux avec Python
Comment faire un test de sac avec python
Je veux jouer avec aws avec python
python: Comment utiliser les locals () et globals ()
Comment entrer le japonais avec les malédictions Python