浅拷贝与深拷贝
可变 (mutable) 参数和不可变 (immutable) 参数
Python 中 string,tuple 和 number 是不可变对象, 而 dict,list 等是可变对象; 不可变对象在进行重新赋值的时候, 实际上是将原始值丢弃, 将变量指向一个新值; 可变对象的可变性实质上是指更改可变对象中的子对象, 比如 list 中的 item 元素的更改.
下文中讨论的赋值, 都是基于上述的条件之上的, 即操作的都是可变对象(dict,list), 如果操作的是不可变对象(string,tuple,number), 则不适用.
直接赋值: 其实就是对象的引用(别名). 例如: b=a, 则 a,b 指向的是同一内存, 类似于同一事物的两个不同叫法.
- a = [1,2,3] #操作的是可变对象(dict,list)
- b = a
- print(id(a)) #通过 id 查看变量在内存中的地址 输出为 1860168
- print(id(b)) #输出为 1860168
- a[0] = 5 #修改的是 a
- print(a) #输出为[5, 2, 3]
- print(b) #输出为[5, 2, 3]
- c=3 #操作的是不可变对象(string,tuple,number)
- d=c
- print(id(c)) #通过 id 查看变量在内存中的地址 输出为 8791403107200
- print(id(d)) #输出为 8791403107200
- c=8 #修改的是 c
- print(c) #输出为 8
- print(d) #输出为 3
来源: http://www.bubuko.com/infodetail-3209826.html