文章使用markdown写的,编辑的时候行间距还可以,显示的时候行间距好小,我也没办法。

首先,需要明白的是python是一种解释性语言标准,他可以由c、java或者其他语言来实现。在python的标准中,变量是链接式的。举个例子来说,内存中的对象和变量就像是给内存对象贴变量名标签而不是给变量盒子装入东西(数值信息)。或者说是给对象分配变量名,而不是给变量赋值。因为python对象在执行赋值之前就已经创立存在了的。

对象标识和变量名

id()返回对象的标识,cpython中id()返回的是唯一的内存地址,变量名则是一个便于理解的别名。

is和==的区别

is需要值和内存地址都相等,只需要值相等。对于此更直观的表示可以执行一下id(),就可以看到不同。

is比更快,不能重载,直接比较的是id。

变量的可变性

在基础阶段,很多教程都会提到,元祖是不可变的数据类型,所以没有插入和删除的操作,只能一次定义。但深究这个问题起来,其实元祖只是在引用上不能变化,但引用的对象是可变的,就导致元祖的值会跟着列表发生变化。浅复制时,多个变量引用同一列表地址,那么改变一个其他也会变。深复制是在内存中重新开辟一个区域,将原来的对象包括其中为对象引用的内容,一同复制到新的区域,并建立新的引用。引用变量的可变性看的是最小对象单位的类型,比如不可变元组中有可变列表对象,列表就是最小的单位,要看它的可变性。列表是可变的,这种特性使得在指向同一个列表对象的情况下,列表实际的长度和值是可以改变的。对其他的类型对象一般不可变,也就不会发生上述变化。

最大的威胁在于,将列表作为参数传给类方法的时候,类变量和参数绑定了同一个对象,执行完返回后原来的传入参数的对象发生了变化。除了刻意要去改传入的列表,否则应该在这之前深复制一个副本,不影响原来的变量的使用。

创建列表的几种写法

a = [1,2,3]
b=a
b is a
>>True c = list(a)
c is a
>>False d = a[:]
d is a
>>False

类似上面使用b=a这样的办法创建的列表,其实只是新建了一个引用,并没有新建一个对象。如果改变a、b其中一个,另一个会随着改变。

深复制和浅复制的具体区别

copy模块可以完成浅复制和深复制,分别对应方法copy()和deepcopy()。其中,deepcopy()可以完成对包含循环引用的对象的拷贝。

具体可以用下面的a分别做两种拷贝,会发现其中深拷贝得到的a[1]的内容和另外两者是不一一样的。

a = (1,[2,3],(4,5))

使用两种拷贝分别复制后查看结果。

最新文章

  1. 【swift学习笔记】二.页面转跳数据回传
  2. [刘阳Java]_MyBatis_常规标签的用法_第6讲
  3. Mini projects #7 ---- Spaceship
  4. sublime安装
  5. loopback 03
  6. [EventBus源码解析] 初探EventBus
  7. 1、IOS开发--iPad之仿制QQ空间(登录界面搭建+登录逻辑实现)
  8. javascript继承(四)—prototype属性介绍
  9. alipay iOS SDK
  10. C++ 嵌入汇编 获取CPU信息
  11. 实验八--uart
  12. JavaScript之对数组中元素进行增删改
  13. php 常用的好函数(持续更新)
  14. insert into select 堵塞update
  15. Android -- 贝塞尔实现水波纹动画(划重点!!)
  16. 51ak带你看MYSQL5.7源码2:编译现有的代码
  17. 【iOS】Swift ?和 !(详解)
  18. 【转】Python多进程编程
  19. cf 20190307 Codeforces Round #543 (Div. 2, based on Technocup 2019 Final Round)
  20. U盘快速启动热键

热门文章

  1. 关于使用Delphi XE10 进行android开发的一些总结
  2. jQuery事件处理(三)
  3. webstorm启动报错
  4. 最小生成树(prime算法 & kruskal算法)和 最短路径算法(floyd算法 & dijkstra算法)
  5. [原]git的使用(六)---远程仓库
  6. vue开发 - 将方法绑定到window对象,给app端调用
  7. 使用正则表达式来截取nginx中的内置变量
  8. Django---简单接受表单信息
  9. 《C与指针》——高级指针话题
  10. eclipse 中 大小写切换:ctrl+shift+x 转为大写 ctrl+shift+y 转为小写