python对象

python变量与对象

对象是盒子,变量是标签

  • 在python中,对象指的是一块内存区域,变量则是贴在这块区域上的标签,用来引用这片区域的值。
  • python中的赋值语句,因为对象总是在=右边,变量在等号左边,因此对象总是先于变量创建,正确说法是把某变量分配给某对象,而不是反过来。

对象的标识、类型和值。

  • 对象标识,即id()函数返回的值,在对象生命周期中不变。
  • 类型,就是对象的类型。
  • 值,两个对象的值可能相同,但仍是不同的对象,因为标识不同。

== & is的不同

  • ==运算符比较两个对象的值,is比较两个对象的标识。
  • 最常用is检查变量绑定的值是不是None,即x is Nonex is not None
  • is运算符速度更快,因为不用调用特殊方法。
  • a == b是语法糖,等价于a.eq(b)。
  • 继承自object的原始__eq__方法等价于is,但是很多类型会重写__eq__方法,转而考虑值的相等性。

元组的相对不可变性

  • 元组里保存的是元素的引用,元组不可变指的是元组中元素的标识不能变,但是如果元素本身是可变的,比如list,那个可以在不改变标识的情况下改变该元素。
  • 即元组的不可变指的是标识不可变,而非值不可变。

直接赋值、浅拷贝和深拷贝区别

  • 直接赋值得到的副本与原对象标识相同,即完全是相同的对象。
  • 不管是浅拷贝还是深拷贝,对象的标识都不同,即副本与原对象是不同的对象,区别在于浅拷贝中副本和原对象中的元素是相同的对象,深拷贝中则不同。
  • 调用构造函数a = list(b)和使用冒号a = b[:]的方法得到的都是浅拷贝。

python函数参数

  • 与C语言中不同,python中默认引用方式传参,如果传给形参的实参是可变对象,则函数处理可能会改变原实参。如果传入的是不可变对象那当然没问题。
  • 不要使用可变类型作为参数缺省值
  • 如果函数接收可变参数,需要注意是否修改传入的实参的值。
posted @   肖肖凯  阅读(730)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示