美文网首页
python拾遗2 - 引用、比较、拷贝 和 参数传递等

python拾遗2 - 引用、比较、拷贝 和 参数传递等

作者: 天命_风流 | 来源:发表于2020-05-04 00:06 被阅读0次

引用

  • 在 Python 中,一切赋值都是引用。例如,a = b 的作用是构建一条 a ->memory(b) 的引用。其本质是,让 a 和 b 指向同一块内存。
  • 使用 del x ,实际上是删除一条引用,但不一定会回收其内存。
  • 函数的参数传递,本质上都是引用的传递。

可变对象和不可变对象:

  • 可变对象:对可变对象的改变,会在内存中添加更改。对于这种更改,不会改变其变量名的引用地址。例如下面的代码就不会改变 a 的引用:
a = [1,2,3]
a.append(4)

但是如果你做一些骚操作,就会改变引用:

a += [4]
  • 不可变对象:对该对象的改变,本质上是在一块新的内存上构建该对象,并更改变量的引用:
a = 10000
a += 1

比较和拷贝

  • 比较:
    1.==用于判断两个对象之间的值是否相等
    2.is 用于判断两者是否为同一个对象(即比较内存的地址)
    3.在 Python 中,会重用 -5 ~ 256 之间的 int 型值,使用 is 时要注意

  • 拷贝:
    1.浅拷贝:为新对象重新分配一块内存,新对象中的元素是旧对象中的元素的引用。
    副作用:如果一个对象中包含可变的子元素,会对子元素产生公共引用
    2.深拷贝:重新分配一块内存,并完全复制原对象中的所有元素的数据:

import copy
a = [1,2,3]
b = copy.deepcopy(a)

相关文章

  • python拾遗2 - 引用、比较、拷贝 和 参数传递等

    引用 在 Python 中,一切赋值都是引用。例如,a = b 的作用是构建一条 a ->memory(b) 的引...

  • Python 进阶内容整理

    Python 之禅 参数传递是值传递还是引用传递 深拷贝与浅拷贝 垃圾回收机制 del 元类 (metaclass...

  • Go语言学习笔记(三)

    指针 Go的指针不能运算 参数传递 Go的参数传递是值传递(值传递:开辟新的空间,拷贝传递参数的值,引用传递:引用...

  • Java中的参数传递

    为了便于理解,会将参数传递分为按值传递和按引用传递。按值传递是传递的值的拷贝,按引用传递传递的是引用的地址值,所以...

  • 读书笔记17.06.02【stack】【vector】

    C++中参数传递:按值传递,指针传递和引用传递按值传递:形参是实参的拷贝。指针传递:拷贝指针,被调用函数对指针指向...

  • 函数参数传递中值传递、地址传递、引用传递的区别?

    函数参数传递中值传递、地址传递、引用传递的区别?1.值传递:形参拷贝实参的值,有内存分配和释放;不会改变原始值2....

  • Day12-Java

    值传递和引用传递 值传递是值的拷贝, 引用传递是引用的拷贝 String 类型是引用类型, new String ...

  • Go语言学习笔记1 2020-11-17

    两种传递方式 1.值传递2.引用传递值传递是值拷贝,引用传递是地址拷贝,地址拷贝效率高,值拷贝数据越大效率越低。 ...

  • Python函数参数传递机制(超级详细)

    Python中,函数参数由实参传递给形参的过程,是由参数传递机制来控制的。通过学习《Python函数值传递和引用传...

  • Java面试集锦

    1. 引用传递的问题(记住java里面是没有指针的,只有值拷贝和引用拷贝) 引用拷贝拷贝的实际是地址,当引用传递过...

网友评论

      本文标题:python拾遗2 - 引用、比较、拷贝 和 参数传递等

      本文链接:https://www.haomeiwen.com/subject/vyysghtx.html