On Tue, Jun 04, 2019 at 11:37:23PM +0000, nathan tech wrote: > globals.py: > > feeds={} > blank_feed={} > blank_feed["checked"]=1 > blank_feed["feed"]=0
That is more easily, and better, written as: feeds = {} blank_feed = {"checked": 1, "feed": 0} > main file: > > import globals as g > # some code that loads a feed into the variable knm Do you mean something like this? If so, you should say so. knm = "some feed" > g.feeds[link]=g.blank_feed; What's "link" here? And there is no need for the semi-colon. > g.feeds[link]["feed"]=knm Right... what the above line does is *precisely* the same as g.blank_feed["feed"] = knm Follow the program logic. I'm inserting 1970s BASIC style line numbers to make it easier to discuss the code, remember that you can't actually do that in Python. 10: g.feeds[link] = g.blank_feed 20: g.feeds[link]["feed"] = knm Line 10 sets g.feeds[link] to the dict "blank_feed". *Not* a copy: you now have two ways of referring to the same dict: "g.blank_feed" and "g.feeds[link]" both refer to the one dict, just as "Nathan" and "Mr Tech" are two ways of referring to the same person (you). So line 20 does this: - look for the name "g", which gives the "globals.py" module; - inside that module, look for the name "feeds", which gives the "feeds" dict; - look inside that dict for the key "link" (whatever value that currently holds), which by line 10 has been set to the same dict "blank_feed". - inside the blank_feed dict, set key "feed" to "knm". > #in the below code, the variable link has a different value: > # load a feed into the variable r Something like this? r = "a different feed" > g.feeds[link]=g.blank_feed Now you have *three* ways of naming the same dict: "g.blank_feed", "g.feeds[link]", "g.feeds[different_link]" but they all point to the same dict. > g.feeds[link]["feed"]=r > > > Now at this point, python would set the first loaded feed to the same > thing as the second loaded feed. It also set g.blank_feed to the second > feed, as well. No, there is only one feed in total. You just keep updating the same feed under different names. > I replaced the last three lines with this: > > # load a feed into the variable r > g.feeds[link]=g.blank_feed; > g.feeds[link]["feed"]=r > > And it works. I don't see any difference between the replacement code and the original code. The code you show does exactly the same thing. > but why does it work? > > Why does that semi unlink all the variables? Semi-colon? It doesn't. You must have made other changes as well, semi-colons don't have any runtime effect. They are *purely* syntax to tell the parser to seperate multiple statements on one line. -- Steven _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor