Python参数传递对象的引用原理解析

 更新时间:2020年05月22日 09:44:50   作者:疯了的小蜗  
这篇文章主要介绍了Python参数传递对象的引用原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

大家都知道在python中,一切皆对象,变量也不再具有类型,变量仅仅是对象的一个引用,我们通常用变量来测类型,通常测得就是被这个变量引用得对象的类型。

python采用的是传递对象的引用,为了方便说明,我们来看一个例子:

test = [1]
def change1(a):
  a = [2]

def change2(a):
  a.append(3)

change1(test)
change2(test)
print test

我们来看一下最后的输出:

[1,3]

是不是有人误以为是[2,3]?那你可得好好看接下来的内容。

传参传的是对象的引用!!!!!!

所以在change1(a)函数中,我们知道形参a与test引用了同一块内存空间,然后a在函数内部被修改了,它执行了另一块内存空间,也就是存放[2]的地方,但是只是a的指向改变了,test的指向还是存放[1]的内存空间。所以,接下来change2()对这块内存空间上放的值进行了修改,就得到了我们最后看到的结果。

为了加深理解,我觉得有必要再举一个类继承的例子:

class Parent(object):
	x = 1
​ class Child1(Parent):
	pass
​ class Child2(Parent):
	pass
​ print Parent.x, Child1.x, Child2.x
Child1.x = 2
​ print Parent.x, Child1.x, Child2.x
Parent.x = 3
​ print Parent.x, Child1.x, Child2.x​
输出结果为:
1 1 1
1 2 1
3 2 3

在继承中,所有子类中的x原本都是引用的父类中x对象的存储空间,但是child1中的x单独指向了另一块存储空间。这样以来,的到这个结果也就不意外了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 使用Flask-Login模块实现用户身份验证和安全性

    使用Flask-Login模块实现用户身份验证和安全性

    当你想要在你的Flask应用中实现用户身份验证和安全性时,Flask-Login这个扩展将会是你的最佳伙伴,它提供了一组简单而强大的工具来处理,下面我们就来看看具体的操作方法吧
    2023-08-08
  • Pytorch linear 多维输入的参数问题

    Pytorch linear 多维输入的参数问题

    这篇文章主要介绍了Pytorch linear多维输入的参数的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • Python全景系列之模块与包全面解读

    Python全景系列之模块与包全面解读

    这篇文章将带大家深入探讨Python模块与包的基本概念,使用方法以及其在实际项目中的应用,同时也会揭示一些鲜为人知,却又实用的技术细节
    2023-05-05
  • pytorch中torch.topk()函数的快速理解

    pytorch中torch.topk()函数的快速理解

    我们在做分类算法时,时常见到@acc1和@acc5的情况,@acc1比较容易实现,但是一直苦于@acc5算法的实现,在此为大家提供一种@topk的实现方法,这篇文章主要给大家介绍了关于pytorch中torch.topk()函数的快速理解,需要的朋友可以参考下
    2022-02-02
  • Python的几种主动结束程序方式

    Python的几种主动结束程序方式

    这篇文章主要介绍了Python的几种主动结束程序方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Python之修改图片像素值的方法

    Python之修改图片像素值的方法

    今天小编就为大家分享一篇Python之修改图片像素值的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python的列表推导式你了解吗

    Python的列表推导式你了解吗

    这篇文章主要为大家详细介绍了Python的列表推导式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • Python文件的应用之序列化与反序列化详解

    Python文件的应用之序列化与反序列化详解

    为了简化数据类型的写入和获取,今天我们来学习一个新的知识点——序列化。通过学习序列化,可以不必过分担心写入文件的数据类型是什么,并且读取文件也可以非常轻松的还原数据类型。感兴趣的可以了解一下
    2022-03-03
  • Django如何利用uwsgi和nginx修改代码自动重启

    Django如何利用uwsgi和nginx修改代码自动重启

    这篇文章主要介绍了Django如何利用uwsgi和nginx修改代码自动重启问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Python利用pynimate实现制作动态排序图

    Python利用pynimate实现制作动态排序图

    这篇文章主要为大家详细介绍了Python如何利用pynimate实现制作动态排序图,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-02-02

最新评论