Different ways of deleting lists

后端 未结 6 1083
攒了一身酷
攒了一身酷 2020-12-15 03:44

I want to understand why:

  • a = [];
  • del a; and
  • del a[:];

behave so differently.

I

6条回答
  •  暖寄归人
    2020-12-15 04:24

    Test 1

    >>> a = [1,2,3] # set a to point to a list [1, 2, 3]
    >>> b = a # set b to what a is currently pointing at
    >>> a = [] # now you set a to point to an empty list
    
    # Step 1: A --> [1 2 3]
    
    # Step 2: A --> [1 2 3] <-- B
    
    # Step 3: A --> [     ] [1 2 3] <-- B
    
    # at this point a points to a new empty list
    # whereas b points to the original list of a
    

    Test 2

    >>> a = [1,2,3] # set a to point to a list [1, 2, 3]
    >>> b = a # set b to what a is currently pointing at
    >>> del a # delete the reference from a to the list
    
    # Step 1: A --> [1 2 3]
    
    # Step 2: A --> [1 2 3] <-- B
    
    # Step 3:       [1 2 3] <-- B
    
    # so a no longer exists because the reference
    # was destroyed but b is not affected because
    # b still points to the original list
    

    Test 3

    >>> a = [1,2,3] # set a to point to a list [1, 2, 3]
    >>> b = a # set b to what a is currently pointing at
    >>> del a[:] # delete the contents of the original
    
    # Step 1: A --> [1 2 3]
    
    # Step 2: A --> [1 2 3] <-- B
    
    # Step 2: A --> [     ] <-- B
    
    # both a and b are empty because they were pointing 
    # to the same list whose elements were just removed  
    

提交回复
热议问题