Rozumiem, że python wbudowany w id()
zwraca identyfikator, który jest unikalny przez cały okres istnienia obiektu. Uważam, że obiekty z nie nakładającymi się okresami życia mogą mieć ten sam identyfikator. Jednak staram się zrozumieć to dość kłopotliwe zachowanie:Powtarzalne zderzenia id na obiektach Pythona
>>> id(matplotlib.image.BboxImage.set_cmap)
4424372944
>>> id(numpy.ma.core.MaskedArray.sum)
4424372944
A w rzeczywistości w wielu przypadkach tłumaczy zachowanie jest powtarzalny:
Mac:~$ python2.7 -c "import matplotlib.image; import numpy; print id(matplotlib.image.BboxImage.set_cmap), id(numpy.ma.core.MaskedArray.sum)"
4343186208 4343186208
Mac:~$ python2.7 -c "import matplotlib.image; import numpy; print id(matplotlib.image.BboxImage.set_cmap), id(numpy.ma.core.MaskedArray.sum)"
4521153312 4521153312
Mac:~$ python2.7 -c "import matplotlib.image; import numpy; print id(matplotlib.image.BboxImage.set_cmap), id(numpy.ma.core.MaskedArray.sum)"
4358591264 4358591264
Mac:~$ python2.7 -c "import matplotlib.image; import numpy; print id(matplotlib.image.BboxImage.set_cmap), id(numpy.ma.core.MaskedArray.sum)"
4389970720 4389970720
Wydaje się, że matplotlib.image.BboxImage.set_cmap
i numpy.ma.core.MaskedArray.sum
zawsze ten sam identyfikator jak siebie nawzajem, nawet w różnych instatiations python interpreter.
Teraz rozumiem, że jest to zgodne z dokumentami dla id()
, ponieważ te dwa obiekty są tworzone dynamicznie po uzyskaniu dostępu i tak naprawdę będą mieć nie nakładające się okresy życia. Ale dlaczego te dwa niepowiązane obiekty zawsze kończyłyby się tym samym identyfikatorem?
(To pytanie jest inny Object methods of same class have same id? ponieważ tutaj pytam, dlaczego ten jest powtarzalny w wielu przypadkach tłumaczy, a nie tylko pozornej id starcia na obiektach z wcieleń niewyspecjalizowanych nakładających.)