py中变量名的“秘密”
今天突然脑子发抽,想到py里有没有指针这个概念,于是我马上google、baidu了一波,发现网上大多都在说py、java、c#这类纯面向对象的编程语言用对象的概念能完全替代指针。那么问题来了,没有指针,py是如何来修改传入函数参数的值的呢?
我们知道py里的变量名是种虚无缥缈的东西,有人把py的变量名形象地比作为标签,给变量赋值就是把变量名“贴到”一块内存上,看下面这个例子你就懂了:
但学过c/c++语言的童鞋都知道,在c/c++中,变量是先声明再使用,在声明时就是为变量开辟内存,所以即使把一个变量赋值给另一个变量,他们的内存地址也是不同的:
那如果是列表名这种类似c中的数组的变量名(c/c++中,数组名就是数组第一个元素的指针)呢?我做了几个小实验,发现python中的列表名十分有意思:
我们可以发现,py中列表名是块大标签,而列表中的元素又分别是块小标签,大标签包含小标签,小标签内容的变动是独立的,既不会影响其他小标签的内容,也不会影响大标签的内容,但如果大标签内容改了则会使所有小标签的内容都会换过。这样就能解释下面这段程序了:
而py中对于函数名,类名等,我们都可以将其看作是大标签,而其中的变量名为小标签,函数参数中传入大标签就能修改小标签了,但如果只传入小标签,则我们改不了大标签中的内容。
再次我们总结一下,py中列表名,字典名,集合名,函数名,类名,(元组改不了)这些我们可以看作是大标签,他们中的元素又分别是小标签,大标签包含小标签,小标签内容的变动是独立的,既不会影响其他小标签的内容,也不会影响大标签的内容,但如果大标签内容改了则会使所有小标签的内容都会换过。
py中变量名的“秘密”的更多相关文章
- JS中变量名作为if条件的 true/flase
在Javascript中,可以直接将变量名放到if条件中, var a;//甚至不定义 if (a){ //... } 以下情况被认为是flase: 1.''空的字符串 2.数字0 3.对象null ...
- 如何解决eclipse、MyEclipse中变量名自动补全问题
背景:这个问题困扰了很长时间,解决过程也并不顺利.不断的试错,再次让我理解这下面这句话—— 世界上对的路可能只有一条,错的路却可能有成千上万条,不要成为别人的前车之鉴.开发之路,只需要记住对的路就行了 ...
- C语言中变量名及函数名的命名规则与驼峰命名法
一.C语言变量名的命名规则:(可以字母,数字,下划线混合使用) 1. 只能以字母或下划线开始:2. 不能以数字开始:3. 一般小写:4. 关键字不允许用(eg:int float=2//error ...
- Py基础—变量名,条件循环,空执行,编码,运算符,字符比较,简化写法
变量名 只能是字母,数字,下划线.数字不能开头,不要和python内置的东西重复.赋予变量名内容:name1 = "shit" 输出变量名内容 print(name1) 条件语句 ...
- JS中变量名和函数名重名
今天骚凯问了一道变量名冲突的题目,感觉很有意思,顺便也复习一下预解析的一些知识,有不对的地方忘前辈大神指正,题目是这样的: var a=100; function a(){ console.log(a ...
- Python中变量名里面的下划线
1 变量名前后都有两个下划线(__X__),表示是系统级变量: 2 变量名前只有一个下划线(_X),表示该变量不是由from module import *导入进来的: 3 变量名前有两个下划线(__ ...
- ie7,ie8 js中变量名和页面元素ID重名,报错
js变量名和一个div的id重名,报错.不知所以然...做个标记
- C中变量名通过宏定义转换成char*类型字符串
#include <iostream> #include <stdlib.h> #define name_to_str(name)(#name) int main() { in ...
- js中变量名加“-” new Vue()不执行
如var app-1 = new Vue(): 不执行的 var app1 = new Vue(): 才能执行
随机推荐
- 老生常谈SpringAop日志收集与处理做的工具包
AopLog是基于Spring Aop 和ThreadLocal实现的一个专门对请求方法内容日志的拦截与处理的日志工具包. 场景 : 我想知道一些重要的请求方法的请求参数,响应参数,请求头,以及耗时, ...
- 第一次软件工程与UML作业
这个作业属于哪个课程 https://url.cn/IMQa18Jo 这个作业要求在哪里 https://edu.cnblogs.com/campus/fzzcxy/2018SE1/homework/ ...
- SpringBoot-03-配置之yaml语法学习
3. SpringBoot配置 3.1 yaml语法学习 配置文件 Springboot使用一个全局的配置文件,配置文件名称固定 spplication.properties 语法结构:key=val ...
- 轻轻松松学CSS:overflow
一.overflow的定义 overflow,音[əʊvəˈfləʊ],义[溢出],就像2.2米的人躺在1.8米的床上,腿得耷拉到床外一样.overflow 属性用于控制内容溢出容器时显示的方式 二. ...
- 玩命学JVM(一)—认识JVM和字节码文件
本篇文章的思维导图 一.JVM的简单介绍 1.1 JVM是什么? JVM (java virtual machine),java虚拟机,是一个虚构出来的计算机,但是有自己完善的硬件结构:处理器.堆栈. ...
- Centos-服务管理-systemctl
systemctl命令属于systemd软件包,这个软件包不仅可以完成系统的初始化工作,还能对系统和服务进行管理 在centos7中,服务单元取代启动脚本,服务单元以.service为文件扩展名,配置 ...
- k8s下的jenkins如何设置maven
关于k8s环境的jenkins集群 k8s下搭建了jenkins集群后,执行任务时会新建pod,任务完成后pod被销毁,架构如下图所示: 在k8s搭建jenkins集群的步骤请参照<> 关 ...
- 小伙伴想学Jenkins自动构建发布项目,我:安排上了!!
写在前面 趁着十一长假,很多小伙伴都在悄悄学习,有些是为了能够顺利通过面试,进入大厂升职加薪.有些则是为了进一步巩固和提高自己的专业技能,希望有朝一日能过成为互联网架构师乃至技术专家.这不,就有小伙伴 ...
- 一文搞懂AQS及其组件的核心原理
@ 目录 前言 AbstractQueuedSynchronizer Lock ReentrantLock 加锁 非公平锁/公平锁 lock tryAcquire addWaiter acquireQ ...
- selenium学习之元素等待(四)
--为什么要设置元素等待: 目前大多数web应用程序都是使用AJAX和JavaScript开发,每次加载一个网页,包括静态网页和动态网页,也就是加载各种HTML标签和JS文件.在网页中进行元素定位时, ...