id()
python yerleşkesinin, bir nesnenin kullanım ömrü için benzersiz bir kimlik döndürdüğünü anlıyorum. Örtüşmeyen yaşam süreleri olan nesneler, anladığım kadarıyla aynı kimliğe sahip olabilirler. Ancak, ben bu oldukça kafa karıştırıcı davranışı anlamaya çalışıyorum:Python nesnelerinde yinelenebilir kimlik çakışmaları
>>> id(matplotlib.image.BboxImage.set_cmap)
4424372944
>>> id(numpy.ma.core.MaskedArray.sum)
4424372944
Ve birden tercüman örneği arasında aslında, davranış tekrarlanabilir:
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
O matplotlib.image.BboxImage.set_cmap
ve numpy.ma.core.MaskedArray.sum
hep aynı kimliği olsun görünür Python yorumlayıcısının farklı ifadeleri arasında bile birbirlerinin.
Artık bunun, bu iki nesnenin erişildiğinde dinamik olarak oluşturulduğundan ve bu nedenle gerçekten örtüşmeyen yaşam süreleri olacağından, id()
belgelerine uygun olduğunu anlıyorum. Fakat bu iki ilgisiz nesne neden hep aynı kimliğe sahip olur?