[list( ) embed (sharedcopy of [ [[ ][ ][ ][ ]even more subtlyalthough doesn' share an object with anymoreit still embeds four references to the same copy of it if you must avoid that sharing tooyou'll want to make sure each embedded copy is uniquey[ ][ all four copies are still the same [[ ][ ][ ][ ] [ [list(lfor in range( ) [[ ][ ][ ][ ] [ ][ [[ ][ ][ ][ ]if you remember that repetitionconcatenationand slicing copy only the top level of their operand objectsthese sorts of cases make much more sense beware of cyclic data structures we actually encountered this concept in prior exerciseif collection object contains reference to itselfit' called cyclic object python prints whenever it detects cycle in the objectrather than getting stuck in an infinite loop (as it once did long ago) ['grail' append(ll ['grail']append reference to same object generates cycle in objectbesides understanding that the three dots in square brackets represent cycle in the objectthis case is worth knowing about because it can lead to gotchas--cyclic structures may cause code of your own to fall into unexpected loops if you don' anticipate them for instancesome programs that walk through structured data must keep listdictionaryor set of already visited itemsand check it when they're about to step into cycle that could cause an unwanted loop see the solutions to the "test your knowledgepart exerciseson page in appendix for more on this problem also watch for general discussion of recursion in as well as the reloadall py program in and the listtree class in for concrete examples of programs where cycle detection can matter the solution is knowledgedon' use cyclic references unless you really need toand make sure you anticipate them in programs that must care there are good reasons to tuplesfilesand everything else