给数组赋值时,引用与数组切片的区别

例1:引用赋值

arr = [1, 2, 3, 4, 5, 6, 7] # 初始数组
print(id(arr), arr)
arr = arr[1:3] # 类似于 aux = arr[1:3], arr = aux
print(id(arr), arr)
运行结果:
4357105608 [1, 2, 3, 4, 5, 6, 7]
4357104200 [2, 3]

其实arr是aux的一个引用,而对于arr[1:3]系统会自动给其分配地址

所以前后arr的地址不一样

例2:数组切片赋值

arr = [1, 2, 3, 4, 5, 6, 7] # 初始数组
print(id(arr), arr)
arr[:] = arr[1:3]
print(id(arr), arr)
运行结果:
4357105608 [1, 2, 3, 4, 5, 6, 7]
4357105608 [2, 3]

arr[:]相当于利用原arr的地址只是将arr[1:3]切片的值继续传递,而并非引用

所以前后arr的地址一样

原文地址:https://www.cnblogs.com/shnuxiaoan/p/12251430.html

时间: 2024-11-08 19:46:56

给数组赋值时,引用与数组切片的区别的相关文章

顶点数组以及解引用单个数组

法线向量 物体的法线向量定义了他的表面在空间中的方向.具体地说定义了他相对于光源的方向.OpenGL使用法线向量确定了这个物体各个顶点所接受的光照.在定义物体的几何形状时,同时也定义了他的法线向量.可以使用glNormal*()函数,把当前法线向量设置为这个函数所标示的值,以后调用glVertex*()时,就会把当前法线向量分配给所指定的顶点.每个顶点尝尝具有不同的法线,所以需要交替调用这个函数. glBegin(GL_POLYGON); glNormal3fv(n0); glVertex3fv

5数组指针和引用:数组

数组 一维数组:数据类型  数组名 [常量表达式] 注意: 命名规则和变量名相同 数组后面一定是[],方括号内 是常量表达式 常量表达式表达元素的个数,即数组的长度 定义数组的常量表达式不能是变量 引用: 一维数组引用的一般形式:数组名[下标] 数组元素的下标起始值为0 初始化: 单个元素逐一赋值   a[10]=1;a[9]=100;...... 聚合方式赋值    int a[10]={1,2,.....10} ; int a[]={1,2,.....10}  ; int a[10]={1,

C/C++,Java,PHP,JavaScript,Json数组、对象赋值时,最后一个元素后面是否可以带逗号?

1 C,C++,Java,PHP都能容忍末尾的逗号 C,C++,Java中对数组赋值时,最后一个元素末尾的逗号可有可无.下面两行代码对这些语言来说是等效的. int a[] = {1,2,3}; /* 正确 */ int a[] = {1,2,3,}; /* 正确 */ PHP这一点也继承了C的特点,下面的两行代码等效. $a = array(1,2,3); /* 正确 */ $a = array(1,2,3,); /* 正确 */ 2 JavaScript视末尾逗号为语法错误! 然而到了Jav

C语言中,当计算字符数组长度时,用sizeof 和strlen 的原理及两者的区别

字符数组的长度计算:必须以终止符'\0'作为边界,但对字符数组赋值时,有两种方式: 1:定义时用字符初始化 (1)char chs[7] = {'a', 'c', '0', 'z', '3','d'}; // 长度为6 上式等价于: (2)char chs[7] = {'a', 'c', '0', 'z', '3','d', '/0'}; // 长度为6 也等价于: (3)char chs[] = {'a', 'c', '0', 'z', '3','d', '/0' }; // 长度为6 但不等

[C++程序设计]字符数组的赋值与引用

只能对字符数组的元素赋值,而不能用赋值语句对整个数组赋值. char c[5]; c={′C′,′h′,′i′,′n′,′a′}; //错误,不能对整个数组一次赋值 c[0]=′C′; c[1]=′h′;c[2]=′i′;c[3]=′n′;c[4]=′a′; //对数组元素赋值,正确 如果已定义了a和b是具有相同类型和长度的数组,且b数组已被初始化,请分析: a=b; //错误,不能对整个数组整体赋值 a[0]=b[0]; //正确,引用数组元素 字符串和字符串结束标志 常量来初始化字符数组.例

**PHP二维数组遍历时同时赋值

php 二维数组遍历赋值 我个人在项目中的写法: //遍历二维数组foreach($tmp_array as $key => $value){ //动态生成图片的URL $attach_url = $this->qiniu_utils->get_download_url($tmp_array[$key]['attach_save_name'] , '7vih5p.com1.z0.glb.clouddn.com', 'PRIVATE'); //赋值URL $tmp_array[$key][

shell的函数引用和数组

shell中的函数 函数就是吧一段代码整理到一个小单元中,并给这个小单元其一个名称,当用到这段代码时直接调用这个名称即可 函数中的特殊调用linux中shell变量 $#,[email protected],$0,$1,$2的含义解释: 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行的命令的结束代码(返回值) $- 使用Set命令设定的Flag一览 $* 所有参数列表.如"$*"用「"」括起

给字符数组赋值的方法

main() { char s[30]; strcpy(s, "Good News!"); /*给数组赋字符串*/ . . . } 上面程序在编译时, 遇到char s[30]这条语句时, 编译程序会在内存的某处留 出连续30个字节的区域, 并将第一个字节的地址赋给s.当遇到strcpy( strcpy 为 Turbo C2.0的函数)时, 首先在目标文件的某处建立一个"Good News!/0" 的字符串. 当中/0表示字符串终止, 终止符是编译时自己主动加上的,

两个数组之间的引用

1 public class Demo{ 2 public static void main(String[] args){ 3 int[] arr1={1,2,4,8,16}; 4 int[] arr2; 5 arr2=arr1;//将数组一赋给数组二 是引用之间的赋值,表示两个数组引用同一个地址内存,只要有一个数组值改动,两个数组里的值都改动了 6 7 arr2[3]=1024;//通过数组2修改其中一个元素的值 8 9 //输出数组一的值 10 System.out.println("数组