python 实现按对象传值

今天研究了下Python中的传值问题,通常在C、C++中有按值传递和按引用传递两种情况,按值传递时会拷贝实参,而按引用传递时只是给形参赋了一个指向实参的指针,但在python却没有区分这两种情况。

通过百度并实际测试,确实发现python没有按值或者按引用来进行区别,对不同的参数对象还是按Python基本类型的处理方式进行处理:

1. 所有传递都是引用传递,形参与实参ID一样

2. 对于string int float bool等不可变类型,操作时会变为新的对象

3. 对于[] {}等可变类型,操作时还是引用的全局对像

测试如下:

以上这篇python 实现按对象传值就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • python 函数传参之传值还是传引用的分析

    首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传递. 值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本.值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值. 引用传递(pass-

  • python 对象和json互相转换方法

    一.python对json的支持 从python2.6开始,python标准库中添加了对json的支持,操作json时,只需要import json即可. 二.python对象转换成json字符串 在把python对象转换成json字符串时,只需要如下知识即可: 1.python对象到json字符串的转换规则: Python JSON dict object list, tuple array str, unicode string int, long, float number True tr

  • python获取引用对象的个数方式

    可以使用python中的sys模块的getrefcount()方法来获取对象引用的个数. 具体可以看以下的实例: import sys # 首先导入sys模块 class Dog: # 定义 Dog 类 pass dog = Dog() # 创建一个dog对象 print(sys.getrefcount(dog)) # 打印对象的引用个数 输出结果: >>>PS C:\Users\pierre\Desktop> python .\test.py >>>2 这里可以

  • python 实现按对象传值

    今天研究了下Python中的传值问题,通常在C.C++中有按值传递和按引用传递两种情况,按值传递时会拷贝实参,而按引用传递时只是给形参赋了一个指向实参的指针,但在python却没有区分这两种情况. 通过百度并实际测试,确实发现python没有按值或者按引用来进行区别,对不同的参数对象还是按Python基本类型的处理方式进行处理: 1. 所有传递都是引用传递,形参与实参ID一样 2. 对于string int float bool等不可变类型,操作时会变为新的对象 3. 对于[] {}等可变类型,

  • Python实现复杂对象转JSON的方法示例

    本文实例讲述了Python实现复杂对象转JSON的方法.分享给大家供大家参考,具体如下: 在Python对于简单的对象转json还是比较简单的,如下: import json d = {'a': 'aaa', 'b': ['b1', 'b2', 'b3'], 'c': 100} json_str = json.dumps(d) print json_str 对于复杂对象,可以使用下面的方法来实现,比如: import json class Customer: def __init__(self,

  • 详解 Python 与文件对象共事的实例

    详解 Python 与文件对象共事的实例 Python 有一个内置函数,open,用来打开在磁盘上的文件.open 返回一个文件对象,它拥有一些方法和属性,可以得到被打开文件的信息,以及对被打开文件进行操作. >>> f = open("/music/_singles/kairo.mp3", "rb") (1) >>> f (2) <open file '/music/_singles/kairo.mp3', mode 'r

  • Python中的对象,方法,类,实例,函数用法分析

    本文实例分析了Python中的对象,方法,类,实例,函数用法.分享给大家供大家参考.具体分析如下: Python是一个完全面向对象的语言.不仅实例是对象,类,函数,方法也都是对象. 复制代码 代码如下: class Foo(object):     static_attr = True     def method(self):         pass foo = Foo() 这段代码实际上创造了两个对象,Foo和foo.而Foo同时又是一个类,foo是这个类的实例. 在C++里类型定义是在编

  • 用pickle存储Python的原生对象方法

    在Python中存储数据到文件中时,简单的做法是调用open函数执行文件写入操作,但是这样做的话,当我们要重新读取文件内容时,就会出现类型不匹配的情况,因为读取的都是字符串的形式,所以还需要进行类型转换,这样不简洁. 或者使用eval函数把字符串转换为对象,但是有时它过于强大,它会执行Python的任何表达式,甚至做出威胁系统正常工作的表达式,这样做不安全. 如果想存储Python原生对象,但又无法信赖文件的数据来源,那么pickle模块会是个理想的选择. pickle模块是能够让我们直接在文件

  • python实现class对象转换成json/字典的方法

    本文实例讲述了python实现class对象转换成json字典的方法.分享给大家供大家参考,具体如下: # -*- encoding: UTF-8 -*- class Student: name = '' age = 0 def __init__(self, name, age): self.name = name self.age = age def convert_to_dict(obj): '''把Object对象转换成Dict对象''' dict = {} dict.update(obj

  • 深入源码解析Python中的对象与类型

    对象 对象, 在C语言是如何实现的? Python中对象分为两类: 定长(int等), 非定长(list/dict等) 所有对象都有一些相同的东西, 源码中定义为PyObject和PyVarObject, 两个定义都有一个共同的头部定义PyObject_HEAD(其实PyVarObject有自己的头部定义PyObject_VAR_HEAD, 但其实际上用的也是PyObject_HEAD). 源码位置: Include/object.h PyObject_HEAD Python 内部, 每个对象拥

  • python urllib urlopen()对象方法/代理的补充说明

    python urllib urlopen()对象方法/代理的补充说明 urllib 是 python 自带的一个抓取网页信息一个接口,他最主要的方法是 urlopen(),是基于 python 的 open() 方法的.下面是主要说明: urllib.urlopen('网址') 这里传入urlopen()的参数有特别说要求,要遵循一些网络协议,比如http,ftp,也就是说,在网址的开头必须要有http://这样的说明,如:urllib.urlopen('http://www.baidu.co

  • Python字典数据对象拆分的简单实现方法

    本文实例讲述了Python字典数据对象拆分的简单实现方法.分享给大家供大家参考,具体如下: 有朋友问了下问题: {'A1;A2': 'B','A3': 'C'}这种数据结构要拆解成{'A1':'B', 'A2': 'B', 'A3': 'C'},要如何实现? 这种问题,如果用普通的for循环来实现的话,还是有点麻烦: >>> dct = {'A1;A2': 'B','A3': 'C'} >>> tmp = {} >>> for k,v in dct.i

  • Python类和对象的定义与实际应用案例分析

    本文实例讲述了Python类和对象的定义与实际应用.分享给大家供大家参考,具体如下: 1.DVD管理系统 # -*- coding:utf-8 -*- #! python3 class dvd: def __init__(self,name,price,state): self.name=name; self.price=price self.state=state def __str__(self): stat='已借出'; if self.state==1: stat='未借出' retur

随机推荐