[' '' '' '' ' 'spamtypeerrorcan only concatenate list (not "str"to list augmented assignment and shared references this behavior is usually what we wantbut notice that it implies that the +is an inplace change for liststhusit is not exactly like concatenationwhich always makes new object as for all shared reference casesthis difference might matter if other names reference the object being changedl [ [ lm ([ ][ ] [ +[ lm ([ ][ ] and reference the same object concatenation makes new object changes but not but +really means extend sees the in-place change toothis only matters for mutables like lists and dictionariesand it is fairly obscure case (at leastuntil it impacts your code!as alwaysmake copies of your mutable objects if you need to break the shared reference structure variable name rules now that we've explored assignment statementsit' time to get more formal about the use of variable names in pythonnames come into existence when you assign values to thembut there are few rules to follow when choosing names for the subjects of your programssyntax(underscore or letter(any number of lettersdigitsor underscoresvariable names must start with an underscore or letterwhich can be followed by any number of lettersdigitsor underscores _spamspamand spam_ are legal namesbut _spamspam$and @#are not case mattersspam is not the same as spam python always pays attention to case in programsboth in names you create and in reserved words for instancethe names and refer to two different variables for portabilitycase also matters in the names of imported module fileseven on platforms where the filesystems are case-insensitive that wayyour imports still work after programs are copied to differing platforms reserved words are off-limits names you define cannot be the same as words that mean special things in the python language for instanceif you try to use variable name like classpython assignmentsexpressionsand prints