区分Python中的可变对象和不可变对象
参考: https://www.cnblogs.com/sun-haiyu/p/7096918.html
"""不过注意函数传参既不是传值也不是传引用,正确的叫法是传对象或者说传对象的引用。
函数参数在传递的过程中将整个对象传入,对可变对象的修改在函数外部以及内部都可见,调用者和被调用者之间共享这个对象,而对于不可变对象,由于不能真正被修改,因此修改往往是通过生成一个新的对象然后赋值来实现的
"""注意一个例子: a+=b 有时候并不一定是a=a+b
a1 = [1, 2, 3]
a2 = a1
print(id(a1), id(a2))
# 实际上是a2指向了新的对象,id已经改变。
# 所以现在a2、a1并不是同一对象的两个引用了,a2变化a1不会改变
a2 = a2 + [4] # 这个等式中,右边的a2还是和a1的id一样的,一旦赋值成功,a2就指向新的对象
print(id(1), id(a2)) # 不等,a2的id变化了
print(a1) # [1, 2, 3]没有变
a1 = [1, 2, 3]
a2 = a1
print(id(a1), id(a2))
a2 += [4] # 相当于调用了a2.extend([4]),原地改变并没有新的对象产生
print(id(1), id(a2)) # 相等,a2的id没有变化
print(a1)
不同的地方在于a2 += [4]
,这句相当于调用了a2.extend([4])
相当于原地改变,并没有新的对象产生!
区分Python中的可变对象和不可变对象的更多相关文章
- python中如何统计一个类的实例化对象
类中的静态变量 需要通过类名.静态变量名 来修改 :通过对象不能修改 python中如何统计一个类的实例化对象?? class Person: #静态变量count,用于记录类被实例化的次数 coun ...
- python中的函数的参数和可变参数
最近在搞python的过程中需要用到给函数传可变参数..所以去网上找前人的帖子学习了一下 为了尊重原作者,这里附上链接:http://www.cnblogs.com/tqsummer/archive/ ...
- 区分Python中的id()和is以及Python中字符串的intern机制
参考:1. https://blog.csdn.net/lnotime/article/details/81194633 2.https://segmentfault.com/q/1010000015 ...
- python中表示False的一些内置对象
By default, an object is considered true unless its class defines either a __bool__() method that re ...
- 《python解释器源码剖析》第6章--python中的dict对象
6.0 序 元素和元素之间可能存在着某种关系,比如学生姓名和成绩.我希望能够通过学生的姓名找到这个学生的成绩,那么只需要将两者关联起来即可.字典正是这么做的,字典中的每个元素就是一个key:value ...
- 【Python核心编程笔记】一、Python中一切皆对象
Python中一切皆对象 本章节首先对比静态语言以及动态语言,然后介绍 python 中最底层也是面向对象最重要的几个概念-object.type和class之间的关系,以此来引出在python如何做 ...
- 【转】Python中自定义可迭代对象
python 中内置的可迭代的对象有 list.tuple.set.dict 等,那么我们自己怎么定义一个可迭代的对象呢?先来段代码吧 import re import reprlib RE_WORD ...
- Python中的几种数据类型
大体上把Python中的数据类型分为如下几类: Number(数字) 包括int,long,float,complex String(字符串) 例如:hello,"hello" ...
- 简单探讨python中的语句和语法
python程序结构 python"一切皆对象",这是接触python听到最多的总结了.在python中最基层的单位应该就是对象了,对象需要靠表达式建立处理,而表达式往往存在于语句 ...
随机推荐
- python六十八课——网络编程之UDP协议
1.1 概述 UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接.简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到 ...
- jsp页面无法使用EL
解决:http://blog.csdn.net/caixiexin/article/details/6958199 在web.xml中头部引入,2.3版本不支持EL,2.4默认开启,2.5默认关闭需要 ...
- 【vue】vue +element 搭建项目,el-input 常用的验证
1.el-input 常用布局 <el-input class="filter-item dialog-search" size="small" @key ...
- python textwrap的使用
参考:https://docs.python.org/3.6/library/textwrap.html textwrap模块提供了一些方便的函数,以及TextWrapper类,它执行所有的工作.如果 ...
- pytorch的backward
在学习的过程中遇见了一个问题,就是当使用backward()反向传播时传入参数的问题: net.zero_grad() #所有参数的梯度清零 output.backward(Variable(t.on ...
- P2678 跳石头题解
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #i ...
- [Micropython] TPYBoard STM32F407开发板运行第一个脚本
从这篇教程开始将动手在TPYBoard STM32F407开发板上运行 Python 脚本,下面教大家拿到这个开发板后怎么用!(该款开发板某宝上有售) 1 连接开发板 通过 USB 线连接你的 PC ...
- 为什么C++11引入了std::ref?
C++本身有引用(&),为什么C++11又引入了std::ref? 主要是考虑函数式编程(如std::bind)在使用时,是对参数直接拷贝,而不是引用.如下例子: #include <f ...
- 通过buildroot+qemu搭建ARM-Linux虚拟开发环境
1. 配置工作环境 sudo apt install gcc build-essential bison flex gettext tcl sharutils libncurses-dev zlib1 ...
- Tencent Cloud Developers Conference(2018.12.15)
时间:2018.12.15地点:北京朝阳悠唐皇冠假日酒店