Ich habe eine Konstanten constants.py
wie so Datei:Inkonsistenz mit Karte in Python
querystring = {
"limit":"10000",
"sort":"desc"
}
dummy1 = {
"a": "22",
"q": "*",
}
dummy2 = {
"a": "24",
"q": "**",
}
streams = [dummy1, dummy2]
Ich versuche, eine Liste zu initialisieren, indem die Werte aus der constants.py
Datei zu manipulieren.
from constants import querystring, streams
def setParams(dummy, querystring):
ld = {}
ld["query"] = setQuerystring(dummy, querystring)
print ld
return ld
def setQuerystring(dummy, querystring):
query = querystring
query["filter"] = "stream:" + dummy["a"]
query["query"] = dummy["q"]
return query
l = map(lambda x: setParams(x, querystring), streams)
print l[0]
print l[1]
Während die Lambda-Funktion ausgeführt wird, wird die Ausgabe korrekt gedruckt, aber wenn ich den Endwert sehen von der Karte zurückgeführt, die Werte sind verschieden. Warum diese Inkonsistenz?
Das Programm Ausgabe:
{'query': {'sort': 'desc', 'filter': 'stream:22', 'limit': '10000', 'query': '*'}} # l[0] -> during lambda execution
{'query': {'sort': 'desc', 'filter': 'stream:24', 'limit': '10000', 'query': '**'}} # l[1] -> during lambda execution
{'query': {'sort': 'desc', 'filter': 'stream:24', 'limit': '10000', 'query': '**'}} # l[0] -> from map
{'query': {'sort': 'desc', 'filter': 'stream:24', 'limit': '10000', 'query': '**'}} # l[1] -> from map
'querystring' in der Tat ist wandelbar' dict'. 'query = querystring' erstellt keine Kopie von dict, sondern verwendet stattdessen eine Referenz. In 'setQuerystring' modifizierst du dieselbe dict-Instanz immer wieder. Versuchen Sie 'query = querystring.copy()' –