python变量与对象
对象是盒子,变量是标签
- 在python中,对象指的是一块内存区域,变量则是贴在这块区域上的标签,用来引用这片区域的值。
- python中的赋值语句,因为对象总是在=右边,变量在等号左边,因此对象总是先于变量创建,正确说法是把某变量分配给某对象,而不是反过来。
对象的标识、类型和值。
- 对象标识,即id()函数返回的值,在对象生命周期中不变。
- 类型,就是对象的类型。
- 值,两个对象的值可能相同,但仍是不同的对象,因为标识不同。
== & is的不同
- ==运算符比较两个对象的值,is比较两个对象的标识。
- 最常用is检查变量绑定的值是不是None,即
x is None与x is not None
- is运算符速度更快,因为不用调用特殊方法。
- a == b是语法糖,等价于a.eq(b)。
- 继承自object的原始__eq__方法等价于is,但是很多类型会重写__eq__方法,转而考虑值的相等性。
元组的相对不可变性
- 元组里保存的是元素的引用,元组不可变指的是元组中元素的标识不能变,但是如果元素本身是可变的,比如list,那个可以在不改变标识的情况下改变该元素。
- 即元组的不可变指的是标识不可变,而非值不可变。
直接赋值、浅拷贝和深拷贝区别
- 直接赋值得到的副本与原对象标识相同,即完全是相同的对象。
- 不管是浅拷贝还是深拷贝,对象的标识都不同,即副本与原对象是不同的对象,区别在于浅拷贝中副本和原对象中的元素是相同的对象,深拷贝中则不同。
- 调用构造函数
a = list(b)和使用冒号a = b[:]的方法得到的都是浅拷贝。
python函数参数
- 与C语言中不同,python中默认引用方式传参,如果传给形参的实参是可变对象,则函数处理可能会改变原实参。如果传入的是不可变对象那当然没问题。
- 不要使用可变类型作为参数缺省值
- 如果函数接收可变参数,需要注意是否修改传入的实参的值。
posted @
2022-03-13 19:47
肖肖凯
阅读(
793)
评论()
收藏
举报