Document why functools.partial() must copy kwargs (#253)

Add a comment to prevent further attempts to avoid a copy for
optimization.
This commit is contained in:
Victor Stinner 2017-02-23 18:26:43 +01:00 committed by GitHub
parent 324c5d8ca6
commit 561ca80cff
2 changed files with 5 additions and 2 deletions

View File

@ -163,6 +163,9 @@ partial_call(partialobject *pto, PyObject *args, PyObject *kw)
Py_XINCREF(kwappl);
}
else {
/* bpo-27840, bpo-29318: dictionary of keyword parameters must be
copied, because a function using "**kwargs" can modify the
dictionary. */
kwappl = PyDict_Copy(pto->kw);
if (kwappl == NULL) {
Py_XDECREF(argappl);

View File

@ -317,8 +317,8 @@ _PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs,
if (nk != 0) {
Py_ssize_t pos, i;
/* Issue #29318: Caller and callee functions must not share the
dictionary: kwargs must be copied. */
/* bpo-29318, bpo-27840: Caller and callee functions must not share
the dictionary: kwargs must be copied. */
kwtuple = PyTuple_New(2 * nk);
if (kwtuple == NULL) {
return NULL;