11

In python, if I have

x = y

any modification to x will also modify y, and I can do

x = deepcopy(y)

if I want to avoid modifying y while working on x

Say, instead, that I have:

myFunc():
    return y

def main():
    x = myFunc()

Is it still the case that modifying x will modify y, or since it is a return from another function it will be like a deepcopy?

user
  • 2,015
  • 6
  • 22
  • 39

2 Answers2

20

In python everything is a reference. Nothing gets copied unless you explicitly copy it.

In your example, x and y reference the same object.

shx2
  • 61,779
  • 13
  • 130
  • 153
  • 6
    I think this is a really important principle to learn in Python: assignment *never* makes a copy. You can extend that to function returns as well. – Mark Ransom Feb 03 '17 at 20:24
  • I knew that about assignment in a function, I was not sure about return because I think it is different in Java – user Feb 03 '17 at 20:31
  • Why does extending a list of ravel()ed ndarrays does not create a shallow copy of the original ndarrays? – John Glen Apr 02 '22 at 16:17
7

It will be a shallow copy, as nothing has been explicitly copied.

def foo(list):
    list[1] = 5
    return list

For example:

>>> listOne = [1, 2]
>>> listTwo = [3, 4]
>>> listTwo = listOne
>>> foo(listTwo)
[1, 5]
>>> listOne
[1, 5]
Aeroblop
  • 280
  • 1
  • 7