ok, potentiellement c'est lié à la mémoire.
basé de
http://stackoverflow.com/questions/793761/built-in-python-hash-functionle hash de l'objet est passé à lookupdic,
en testant l'interpréteur,
on observe bien ce qui est suggéré.
du coup lors de la création de {'test',...}
si 'test' associe un PyObj de type string (je connais pas python), alors le hash appliqué sur PyObjva varier d'une exec à l'autre (car les PyObj auront une adresse mémoire différente d'où des hashs différents)
il faudrait tester la supposition...
ce que je confirme,
en utilisant
sha d69ce575b98ea9f1835de66d3c0a4ce4a5afb79c
et appliquant
- Code: Tout sélectionner
From c2cb4badb7aa8d3a65b547d3777c8d93a030bb11 Mon Sep 17 00:00:00 2001
From: someone
Date: Tue, 8 Sep 2015 21:48:41 +0200
Subject: [PATCH] uesless
---
Objects/setobject.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/Objects/setobject.c b/Objects/setobject.c
index 03bb230..00dde6d 100644
--- a/Objects/setobject.c
+++ b/Objects/setobject.c
@@ -29,7 +29,7 @@
#include "Python.h"
#include "structmember.h"
-
+#include "stdio.h"
/* Object used as dummy key to fill deleted entries */
static PyObject _dummy_struct;
@@ -59,11 +59,21 @@ set_lookkey(PySetObject *so, PyObject *key, Py_hash_t hash)
int cmp;
entry = &so->table[i];
+
+
+
+{
+FILE *fp;
+fp=fopen("test.txt", "wa");
+fprintf(fp, "hash= %d\n", hash);
+fclose(fp);
+}
+
+
if (entry->key == NULL)
return entry;
perturb = hash;
-
while (1) {
if (entry->hash == hash) {
PyObject *startkey = entry->key;
--
1.9.1
le fichier génère un hash différent à chaque invocation de l'interpréteur de python avec pour ligne interprétée a={'test'}