赋值

赋值、深拷贝、浅拷贝的区别

这一生的挚爱 提交于 2020-01-28 04:07:42
赋值b=a 只传递对象的引用,b指向对象a的内存地址空间,因此,原有列表a改变的同时,被赋值的b也会做相应的改变。 浅拷贝b1=copy.copy(a) a与b1的内存地址不同,但是子对象的内存地址相同,因此,原始数据改变并不会造成深拷贝里面任何子项的改变 深拷贝b2=copy.deepcopy(a) a与b2的内存地址空间不同,包含子对象的拷贝,所以原始对象的改变并不会造成深拷贝里面的任何子对象的改变 当深拷贝和浅拷贝针对的对象全部是不可变数据类型时,两者效果相同; 当深拷贝和浅拷贝针对的对象包含的时可变数据类型时,两者才出现上述区别。 可变数据类型 不可变数据类型 list 所有数据类型、波尔型、元组、str 浅拷贝的实现 深拷贝的实现 li.copy( ) 或 li[:] 或 copy.copy( ) li.deepcopy( ) 可变数据类型镶嵌可变数据类型 >> > import copy >> > a = [ 1,2 ] >> > b = [ 3,4 ] >> > c = [ a,b ] >> > c [ [ 1, 2 ] , [ 3, 4 ] ] >> > d = copy.copy ( c ) >> > id ( a ) 139939016415712 >> > id ( b ) 139939016415640 >> > id ( c )

变量进阶

北慕城南 提交于 2020-01-27 03:54:07
01. 变量的引用 变量 和 数据 都是保存在 内存 中的 在 Python 中 函数 的 参数传递 以及 返回值 都是靠 引用 传递的 1.1 引用的概念 在 Python 中 变量 和 数据 是分开存储的 数据 保存在内存中的一个位置 变量 中保存着数据在内存中的地址 变量 中 记录数据的地址 ,就叫做 引用 使用 id() 函数可以查看变量中保存数据所在的 内存地址 注意:如果变量已经被定义,当给一个变量赋值的时候,本质上是 修改了数据的引用 变量 不再 对之前的数据引用 变量 改为 对新赋值的数据引用 1.2 变量引用 的示例 在 Python 中,变量的名字类似于 便签纸 贴在 数据 上 定义一个整数变量 a ,并且赋值为 1 代码 图示 a = 1 将变量 a 赋值为 2 代码 图示 a = 2 定义一个整数变量 b ,并且将变量 a 的值赋值给 b 代码 图示 b = a 变量 b 是第 2 个贴在数字 2 上的标签 1.3 函数的参数和返回值的传递 在 Python 中,函数的 实参 / 返回值 都是是靠 引用 来传递来的 def test(num): print("-" * 50) print("%d 在函数内的内存地址是 %x" % (num, id(num))) result = 100 print("返回值 %d 在内存中的地址是 %x" % (result

this的原理图解

若如初见. 提交于 2020-01-26 21:33:59
构造方法之间可以相互调用,那为什么他们之间通过this就可以调用呢? 使用this可以实现构造方法之间的调用,但是为什么就会知道this调用哪一个构造方法呢?接下来需要图解完成。 class Person { private int age ; private String name ; Person() { } Person(String nm) { name = nm; } Person(String nm, int a) { this (nm); age = a; } } class PersonDemo { public static void main(String[] args) { Person p = new Person( " 张三 " , 23); } } 图列说明: 1.先执行main方法,main方法压栈,执行其中的new Person(“张三”,23); 2.堆内存中开辟空间,并为其分配内存地址0x33,,紧接着成员变量默认初始化(name=null age = 0); 3.拥有两个参数的构造方法(Person(String nm , int a))压栈,在这个构造方法中有一个隐式的this,因为构造方法是给对象初始化的,那个对象调用到这个构造方法,this就指向堆中的那个对象。 4.由于Person(String nm , int a

python的变量与赋值

家住魔仙堡 提交于 2020-01-26 10:12:44
python的变量与赋值 1.变量的命名规则 变量其实通过一个标记调用内存中的值,而变量名就是这个标记的名称,但是万一这个标记已经被提前占用或者解释器认为这个标记是不合法的,那么就会报错。下面总结了一下变量的命名规则: 1.不能使用python的关键字,也就是说标记不能被提前占用,python的关键字包括: ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield'] 2.变量名的第一个字符不能是数字,这样的命名被认为是不合法的。 3.变量名只能是字母、数字或下划线(_)的任意组合。   规则就是规则,没有什么好解释的,但是我们可以在符合规则的前提下做进一步的要求,详情请参照python的pep8编码规范    2.变量的赋值 在python中,我们对变量进行赋值的时候,用的是一个等于符号(=),要注意不是两个(==)。 例如: a =

C++基础内容复习

陌路散爱 提交于 2020-01-26 09:50:31
下列语句定义了5个变量: int count; double sales_price,sum; std::string title; Sales_item bookItem; 每个定义都是以 类型说明符 开始,如上int、double、std::string、Sales_item都是类型名,其中int和doubleshi是 内置类型 ,std::string是 标准库定义的类型 (需要#include <string>), Sales_item是 自定义类型 。 ::作用域操作符,含义是右操作符的名字可以在左操作数的作用域中找到 简化std::string 的写法是使用using。 比如使用using std::string; using std:cin;之后,在下面的代码中就可以直接使用string和cin了。 当进行string对象和字符串字面量混合连接操作时,+操作符的左右操作数必须至少有一个是string类型的。 比如,如下s1的初始化时正确的 string item ="what a mess!"; string s1 =item +","; 但是:string s1 ="what a mess!" +","; 就会报错,这个和C#是 完全不一样 的。 虽然任何整数数值都可以作为索引,但是索引的实际数据类型却是unsigned类型的string::size_type

Java 构造器

别等时光非礼了梦想. 提交于 2020-01-26 06:03:47
Java 构造器 构造器是什么? 1.构造器,也称构造方法、构造函数。作用是构造出来一个类的实例,确保对象得到初始化。 2.构造器的格式: 权限修饰符 类名(无参/有参){}。 3.根据有无参数,可分为无参构造 和有参构造。 构造器的特性# 1.与一般方法名不同的是,构造方法名必须和类名保持一致,并且没有返回值。 2.Java编译器会自动创建无参构造函数,因此在类中,无参构造即使没有,我们也可省略不写。实例化对象时无需赋值。 3.倘若类中已存在有参构造函数,则编译器不再提供默认无参构造。实例化对象时需赋值,不然报错。 4.当类实例化一个对象时会自动调用构造方法。 示例代码一:无参构造 学生类 public class Student { //权限修饰符是public,表示内部属性能被其他类访问到。若使用private,则需要set/get才能访问 public String name ; public int age ; //无参构造,编译器自带,可不写。 public Student ( ) { System . out . println ( "括号内无参数,这就是无参构造" ) ; } } 测试类 public class Test { public static void main ( String [ ] args ) { Student st = new Student

理解C# 4 dynamic(1) - var, object, dynamic的区别以及dynamic的使用

心不动则不痛 提交于 2020-01-25 23:25:13
一. 为什么是它们三个? 拿这三者比较的原因是它们在使用的时候非常相似。你可以用它们声明的变量赋任何类型的值。 看看下面的示例: var a = 1; object b = 1; dynamic c = 1; 你还可以使用关键字为它们赋上更加复杂的类型 var a = new string[]{"1"}; object b = new string[]{"1"}; dynamic c = new string[]{"1"}; 二. 能够任意赋值的原因 上面的例子中,看起来三者非常相似,但是背后的原理却是非常不同。 var是C# 3中引入的,其实它仅仅只是一个语法糖. var本身并不是一种类型, 其它两者object和dynamic是类型。 var声明的变量在赋值的那一刻,就已经决定了它是什么类型。 所以如果你这样使用,就会有编译错误: var a = 1; a = "Test"; object之所以能够被赋值为任意类型的原因,其实都知道,因为所有的类型都派生自object. 所以它可以赋值为任何类型: object a = 1; a = "Test"; 那么dynamic呢? 它是C#引入的新类型,它的特点是申明为dynamic类型的变量,不是在编译时候确定实际类型的, 而是在运行时。 所以下面的代码是能够通过编译的,但是会在运行时报错: dynamic a = "test"; a

Java基础学习心得体会

半腔热情 提交于 2020-01-25 08:24:23
Java基础学习心得体会 变量:程序运行期间,值可以发生变化的量;把变量理解为容器; java的执行过程从上到下,从左到右。 运算符: 1.赋值运算符 = 2.算数运算符 + - * / % ++ – 3.比较运算符> < == != >= <= 4.复合运算符+= -= *= /= %= 5.逻辑运算符&& || ! 6.条件运算符 ? : 运算符的使用注意 赋值运算符; 赋值号 从后向前翻译 int m=8*7; 算数运算符; int m=10; int n=21; System.out.println(m+n); System.out.println(m%n); System.out.println(m/n); System.out.println(n%m); System.out.println(n/m); System.out.println(m++);//先执行语句 后自增 //m++;++m;此情况 自增都会执行 /* * 如果除了自增还有其他代码需要执行,那么++在前就先自增后执行语句; * 如果++在后,就先执行语句,后自增; * --同上 * */ 3.比较运算符 返回值 boolean int m=18; int n=28; boolean result= m>n; System.out.println(result); System.out.println

vue本地设置请求接口及数据

狂风中的少年 提交于 2020-01-25 00:55:18
1、安装axios yarn add axios 2、在入口文件main.js中设置 import { getRequest, postRequest} from './libs/api';//导入 Vue.prototype.getRequest = getRequest;//注入到vue对象 Vue.prototype.postRequest = postRequest;//注入到vue对象 3、创建api接口  1:src目录下创建libs文件夹   2:在libs文件夹中创建api.js接口文件 import axios from 'axios' // 统一请求路径前缀 let base = '' // let base = 'http://localhost:60155'; export const getRequest = (url, params) => { // let accessToken = getStore('accessToken'); return axios({ method: 'get', url: `${base}${url}`, params: params // headers: { // 'accessToken': accessToken // } }) } export const postRequest = (url, params)

第二章 变量 数据类型和运算符

夙愿已清 提交于 2020-01-24 11:24:34
1.什么是变量?   变量代表一块内存区域,变量类型不一样,这一块内存的大小也不一样。   #在编程语言里,你可以通过定义变量,向内存里添加数据或者修改内存已有的数据。说白了,变量就是代表程序运行时存放数据的地方   数据的存放:磁盘、内存卡、U盘、光盘、内存条、固态、机械硬盘等等        简单信息(临时信息)纸    人把信息存在大脑   变量怎么在内存中存储   已将数据存储在内存中怎样去找   分配后的内存会有内存地址(内存地址不好记忆):通过变量名可以快速地找到它的存储的数据 2.Java定义的常用数据类型有哪些?   字节:是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符    八个二进制构成一个"字节(Byte)",它是存储空间的基本计量单位。     一个字节可以存储一个英文字母或者半个汉字,换句话说,一个汉字占据两个字节的存储空间   位:是电子计算机中最小的数据单位。每一位的状态只能是0或1     数据只用0或者1这种形式,(这里只表示一个数据点,不是数字),一个0或者1占一个"位",而系统中规定8个位为一个字节       电脑中所有的数据都是以二进制数存储的,一个0或者1叫1bit即一位,八位二进制数称为一个字节,即Byte!   # 最小的存储单位为位(bit):   # 只能容纳两个值(0或1)之一