this post was submitted on 02 Aug 2025
12 points (92.9% liked)

Python

7366 readers
11 users here now

Welcome to the Python community on the programming.dev Lemmy instance!

πŸ“… Events

PastNovember 2023

October 2023

July 2023

August 2023

September 2023

🐍 Python project:
πŸ’“ Python Community:
✨ Python Ecosystem:
🌌 Fediverse
Communities
Projects
Feeds

founded 2 years ago
MODERATORS
 

if var1 equals 1, and you run var2 = var1, that sets var2 to 1.

if list1 equals [1, 2, 3], and you run list2 = list1, that sets list2 to list1

so if you then run var1 = 2, var2 will still be 1

but if you run list1 = [3, 2, 1], list2 will give [3, 2, 1]

you are viewing a single comment's thread
view the rest of the comments
[–] marcos@lemmy.world 1 points 6 days ago (1 children)

It doesn't seem to copy the value, just make another reference:

>>> a = 65535
>>> b = a
>>> b is a
True

One thing I know that Python does is optimize the value away for the few smallest values of the primitives. But that's on optimizations.

[–] nickwitha_k@lemmy.sdf.org 2 points 5 days ago (1 children)

Oh right! You are indeed correct. It is effectively just seeing a pointer there. What Python considers that to be is a shallow copy. But this only applies to "primitive" types. If you change the value of either, it will cease to act as a pointer to the same object but instead allocate a new one. It's a bit weird if one isn't used to all of that abstraction between oneself and the memory.

[–] marcos@lemmy.world 2 points 5 days ago

As I said, it's because you can't change the value of a primitive value. (That is, unless you abuse the C interface.)

Because Python doesn't protect classes, you just can't do the same with the types you create. But that's what is special, not the way if handles variables.

And this is different from languages like Java/C#, PHP/Perl, etc. Most imperative languages have primitive atomic values that go directly into your variables. But Python has only references (except for some complicated optimizations). Anyway, it is weird, and it's one of the reasons people should learn C or Rust eventually.