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(): 才能执行
随机推荐
- 小白的springboot之路(十七)、阿里云OSS 的使用
0-前言 项目中,文件服务必不可少,常用的有各云服务商的OSS服务(如阿里云OSS,腾讯云OSS,七牛云).自建(fastDFS.minio): 推荐:如果用云服务的话,阿里云OSS很方便,如果自建的 ...
- three.js学习3_相机相关
Three.Camera Camera是所有相机的抽象基类, 在构建新摄像机时,应始终继承此类. 常见的相机有两种类型: PerspectiveCamera(透视摄像机)或者 Orthographic ...
- 预科班D6
2020.09.14星期一 预科班D6 学习内容: 自习 发布小游戏 1.配置网络 #查看当前ip ifconfig #关闭NetworkManager systemctl stop NetworkM ...
- 在CentOS 7服务器中使用Jexus发布.net core webapi
环境: 服务器:CentOS 7 64位 .net core 2.1 Jexus独立版 官网:https://www.jexus.org/ 按照官网安装独立版命令:curl https://jexus ...
- Linux实战(12):Centos装机常用脚本-进阶版
#!/bin/bash #shell菜单演示 function menu() { echo -e `date` cat <<EOF ---------------------------- ...
- zabbix安装要求
zabbix server 和 zabbix Agent都在一个压缩包中,可以从官网上下载源码包,www.zabbix.com/download.php zabbix是C语言编写,压缩包的文件夹介绍: ...
- JVM性能调优(2) —— 垃圾回收器和回收策略
一.垃圾回收机制 1.为什么需要垃圾回收 Java 程序在虚拟机中运行,是会占用内存资源的,比如创建的对象.加载的类型数据等,而且内存资源都是有限的.当创建的对象不再被引用时,就需要被回收掉,释放内存 ...
- 高并发场景-请求合并(一)SpringCloud中Hystrix请求合并
背景 在互联网的高并发场景下,请求会非常多,但是数据库连接池比较少,或者说需要减少CPU压力,减少处理逻辑的,需要把单个查询,用某些手段,改为批量查询多个后返回. 如:支付宝中,查询"个人信 ...
- Solon详解(九)- 渲染控制之定制统一的接口输出
Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...
- Python练习题 014:完数
[Python练习题 014] 一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3.编程找出1000以内的所有完数. -------------------- ...