Ottieni questo semplice codice Python, uguale a quello dell'istanza di re.compile. Ho notato che anche se sto usando lo stesso valore, crea due istanze e le ripete di conseguenza.Qual è la ragione per cui python gestisce locals() in questo modo (in coppia)?
Mi chiedo se si può dire la ragione di questo comportamento,
- Perché si crea la seconda istanza a tutti?
- Perché solo due?
- E perché ogni volta scelto l'altro e non a caso?
il codice CLI:
>>> import re
>>>
>>> rec = re.compile("(?:[-a-z0-9]+\.)+[a-z]{2,6}(?:\s|$)")
>>>
>>> rec.match('www.example.com')
<_sre.SRE_Match object at 0x23cb238>
>>> rec.match('www.example.com')
<_sre.SRE_Match object at 0x23cb1d0>
>>> rec.match('www.example.com')
<_sre.SRE_Match object at 0x23cb238>
>>> rec.match('www.example.com')
<_sre.SRE_Match object at 0x23cb1d0>
>>> rec.match('www.example.com')
<_sre.SRE_Match object at 0x23cb238>
>>> rec.match('www.example.com')
<_sre.SRE_Match object at 0x23cb1d0>
Edit:
Come @kimvaisanswered, la ragione risiede nel _
che detiene l'ultima assegnazione. vedi, se non stai assegnando, piuttosto stampando, è lo stesso, sempre.
>>> print rec.match('www.example.com')
<_sre.SRE_Match object at 0x23cb1d0>
>>> print rec.match('www.example.com')
<_sre.SRE_Match object at 0x23cb1d0>
>>> print rec.match('www.example.com')
<_sre.SRE_Match object at 0x23cb1d0>
>>> print rec.match('www.example.com')
<_sre.SRE_Match object at 0x23cb1d0>
>>> print rec.match('www.example.com')
<_sre.SRE_Match object at 0x23cb1d0>
>>> print rec.match('www.example.com')
<_sre.SRE_Match object at 0x23cb1d0>
Proprio quello che stavo per suggerire. +1. Prova a inserire i comandi in uno script e a eseguirlo; quindi l'allocatore in realtà riutilizza l'indirizzo (almeno sulla mia macchina Linux). –
che * suona come la risposta giusta, aspetterò altri riferimenti prima di contrassegnare questa risposta come ** corretta **. –