[Python] Shallow copy: is the Python.org documentation wrong?

Discussão em 'Python' iniciado por Stack, Janeiro 26, 2025.

  1. Stack

    Stack Membro Participativo

    Is the official documentation on Python.org wrong, or did I interpret something wrongly?

    Near the end of the Lists Section of the documentation in "An Informal Introduction to Python", one can find the following description about copying lists:


    Simple assignment in Python never copies data. When you assign a list to a variable, the variable refers to the existing list. Any changes you make to the list through one variable will be seen through all other variables that refer to it.:

    >>> rgb = ["Red", "Green", "Blue"]
    >>> rgba = rgb
    >>> id(rgb) == id(rgba) # they reference the same object True
    >>> rgba.append("Alph")
    >>> rgb ["Red", "Green", "Blue", "Alph"]​

    So I understand that the new list is a reference to the original list. But immediately then, the documentation states:


    All slice operations return a new list containing the requested elements. This means that the following slice returns a shallow copy of the list:

    >>> correct_rgba = rgba[:]
    >>> correct_rgba[-1] = "Alpha"

    >>> correct_rgba ["Red", "Green", "Blue", "Alpha"]

    >>> rgba ["Red", "Green", "Blue", "Alph"]​

    So, if I understand correctly:

    • rgba[:] is the slice operation
    • this makes a shallow copy of the original list
    • it copies data from the original, into a new list that isn't a reference to the original

    But:

    • after reading about the difference between shallow and deep copies, I understand that shallow copies are references to their original, whilst deep copies are independent (unreferenced) copies
    • in the example above, the documentation creates a deep copy but mentions it as a shallow copy?

    Continue reading...

Compartilhe esta Página