(original) (raw)

On Thu, Jan 4, 2018 at 3:25 AM, Paul Moore <p.f.moore@gmail.com> wrote:
On 4 January 2018 at 00:17, Greg Ewing <greg.ewing@canterbury.ac.nz> wrote:
\> Guido van Rossum wrote:
\>>
\>> contextvars.copy\_context().run(func, )
\>
\> If contexts are immutable, why is there something
\> called copy\_context?

Agreed. This was something that bothered me, too. I mentioned it in my
review, but that seemed to get lost in the other comments in this
thread...

I get the impression that the logic is that the context is immutable,
but the ContextVars that it contains aren't, and the copy is deep (at
least 1 level deep) so you copy then change the value of a ContextVar.
But rereading that sentence, it sounds confused even to me, so it's
either not right or the implementation falls foul of "If the
implementation is hard to explain, it's a bad idea." :-)

It was get\_context() in an earlier version of PEP 567\. We changed it to copy\_context() believing that that would clarify that you get a clone that is unaffected by subsequent ContextVar.set() operations (which affect the \*current\* context rather than the copy you just got).

\[The discussion is fragmentary because Yury is on vacation until the 15th and I am scrambling for time myself. But your long post is saved, and not forgotten.\]

--
--Guido van Rossum (python.org/\~guido)