python基础知识学习
- 1、python对象的比较和拷贝
- 1.1对象比较(== 和 is)
- 1.2浅拷贝和深拷贝
- 浅拷贝
- 深拷贝
- 2、值传递和引用传递
- 2.1值传递
- 2.2 引用传递
1、python对象的比较和拷贝
1.1对象比较(== 和 is)
==:只是比较两个对象的值是否相等,如果相等则返回true
is:比较对象的值及其引用,也就是其地址
对于整型数字来说,下面a is b为True的结论,只适用于-5到256
a = 10
b = 10
a == b
output: True
a is b
output:True
事实上,出于对性能的考虑,python内部会对-5-256维持一个数组,起到缓存的作用。这样,当每次创建一个此区间内的整型数字时,python都会从这个数组返回对应的引用,而不会开辟新的内存空间。
我们知道元组是不可变的,但元组可以嵌套列表,如果元组所嵌套的列表发生变化,则会引起元组的被动改变。这样也代表着元组本身也是发生了间接变化,之前用‘==’或则‘is’所取得的结果,就不再适用。
t1 = [1,2,[3,4]]
t1 = [1,2,[3,4]]
t1 == t2
True
t1[-1].append(5)
t1 == t2
False
1.2浅拷贝和深拷贝
浅拷贝
浅拷贝是指源对象和拷贝对象共用一份实体,仅仅是引用的变量不同。对任何一个对象的改动都会影响另一个对象
深拷贝
深拷贝是对源对象与拷贝对象相互独立,其中任何一个对象的改动都不会对另一个对象造成影响。
2、值传递和引用传递
2.1值传递
值传递时只是实际参数把其值传递给相应的形参,方法执行中形参值的改变不会影响实际参数的值
2.2 引用传递
引用传递也称地址传递,在方法调用时,实际上是把参数的引用(传的是地址,而不是参数的值)传递给相对应的形式参数,在方法执行过程中,对形参的操作实际上就是对实参的操作,形参的改变会影响实参的改变。