Python Forum
pop recursive to other variables
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
pop recursive to other variables
#1
Disclaimer: I am not a python guru, other languages quasi-guru.

This isn't making sense to me, either I'm not fully understanding the pop method or possibly I have discovered a glitch???

Example of the way I expect variables to function:
Python 3.8.2 (default, Apr 27 2020, 15:53:34) 
[GCC 9.3.0] on linux

>>> x=1
>>> y=2
>>> z=3
>>> print(x,y,z)
1 2 3
>>> y=x
>>> print(x,y,z)
1 1 3
>>> x=x+1
>>> print(x,y,z)
2 1 3
>>> 
Changing the variable X does not effect the variable Y in this example
Now the issue:

>>> color=['black','brown','green','yellow']
>>> print(color)
['black', 'brown', 'green', 'yellow']
>>> color2=color
>>> print(color,color2)
['black', 'brown', 'green', 'yellow'] ['black', 'brown', 'green', 'yellow']
>>> colorpop=color2.pop()
>>> print(color,color2,colorpop)
['black', 'brown', 'green'] ['black', 'brown', 'green'] yellow
>>> 
var color2 received the list from var color
var colorpop it the pop of var color2

but the pop of color2 recursively effects the var color as well

Why are both var color and color2 "popped"
Am I missing something here?
Reply
#2
Suppose that you call your car Nitro and your partner calls it Batmobile. If I crash your car, it will affect both Nitro and Batmobile because they are just two different names for the same object.

The same thing happens in python. If I say Batmobile = Nitro, I'm only defining a new name for the python object currently bearing the name Nitro. In your case, color and color2 are just two names for the same python list. If you pop that list, it will affect both variables.
Reply
#3
(Jun-30-2020, 03:50 PM)nieman050313 Wrote: Changing the variable X does not effect the variable Y in this example

That's because you are not "changing" the variable, you're assigning a new one. y=2 doesn't do anything to the variable that y held previously. It just makes a new assignment. A different object is now associated with the name "y"

>>> y=3
>>> id(y)
4394573552
>>> y=2
>>> id(y)
4394573520
Quote:Now the issue:
[...]
but the pop of color2 recursively effects the var color as well

Why are both var color and color2 "popped"
Am I missing something here?

pop does modify the variable. The object remains in place, just the object is now modified.

>>> color = ['white', 'blue', 'red']
>>> id(color)
4396729096
>>> color.pop()
'red'
>>> id(color)
4396729096
>>> print(color)
['white', 'blue']
Assignment doesn't change the data in an object, but other operations may (assuming the object is mutable).
Reply
#4
ok......... bad morning......over-thinking....... first example I re-declared the x variable....... sorry for wasting your time, and sorry for missing the giant yellow banner at the top IRT posting with tags
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Combine Two Recursive Functions To Create One Recursive Selection Sort Function Jeremy7 12 7,195 Jan-17-2021, 03:02 AM
Last Post: Jeremy7

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020