+ 1
Question about assigning & len()
I was solving the “Longest Word” thing in python core First I came up with a possible solution which I still think should work, but there was something weird https://code.sololearn.com/cd18GGXS0mfu/?ref=app (the origin one was alot cleaner and had fewer variables it got a bit messy when I was trying to figure out what was wrong)
14 Antworten
+ 3
AI 0523, strings belong to the "immutable types".
You can't change them in any way, so for you as a Python user it doesn't matter if it's the same object or not. (Different versions of Python may handle it differently.)
However with "mutable" Types, objects that can be altered, like a list where you can put stuff in and take it out, there it absolutely matters, if it's merely a similar list or the very same list.
I know my tutorial is a bit lengthy, but I think you won't regret it reading and thinking it through a few times - because in Python you just have to know how this works.
+ 2
I explain what you're dealing with in this educational code:
https://code.sololearn.com/c89ejW97QsTN/?ref=app
+ 1
As far as i know, when i do things like b=a; c=a; d=a;
isnt it like making a clone of a, and whatever i do to the clones the origin variable a doesnt change, right?
+ 1
As you said, the functions change the original variable as well as all thr clones, they are "connected". It's not the len() function which gives you that change, it's that "b[x] = int(len(b[x]))" line. You assign a new value to every "b[x]" which also gets assigned to the duplicate variables, a and d.
No magic happening there, just how Python works.
+ 1
And also you were right with the len() function - it doesn't change any of the content, it just gives you an information about the length of something - but you assigned the value to "b[x]" and that's where the things started to mess up.
+ 1
AI 0523, is what exactly the same for strings?
0
But in mine the part
for x in range(len(d)):
b[x]=int(len(b[x]))
actually changed the original variable a, which i thought should only effect the clone(b)
I also tried changing the part int(len(b[x])) into int(len(d[x])) or int(len(a[x])) but they did the same thing
0
I solved it by setting it all independent
txt = input()
a=txt.split(" ")
b=txt.split(" ")
d=txt.split(" ")
But the thing is, what i thought was right… len() function on a clone doesnt change the original variable(Actually len(a) doesnt even change the value of a, its just used to count the lengths and use it, not to change the variable itself) and i cant figure out why it happened in the post code
0
One possible reason i think is its becuz variable a has a method .split() and when the len() effects it it somehow also changes all the related variables, especially the clone thing i did
But im not sure and if im right i have no idea why
0
Paleon oh the duplicates variables are all connected..?
I just tested it and it is with lists, but does it work with strings too?
0
AI 0523 Basically when you create a new variable based on a previously created one (for instance "b = a"), the variable "b" itself "remembers" that it was created as a copy of the variable "a". That is why it changes also when the other variable is changed. It is a concept of Python which messes up a lot of codes, so it is great that you learnt about it now!
0
The duplicated variables being connected… it is with lists but i dont think it is with strings
0
oh i get it thx for the explanation..!