Python基础系列之--阶段总结【8】

目标

  1. 补充基础阶段相关内容
  2. 回顾基础系列之数据类型

第一部分

有了前一部分的铺垫,相信大家已经明白变量名只是对内存空间的映射,那么

  1. 共享变量是怎么回事?
  2. 深浅拷贝又是是什么?

1. 赋值与深浅拷贝

🤔 思考如下代码,a、b、c、x四者在x = x + [3, 4]前后的地址是如何变化的?

a = 1
b = 2
c = 1
# print(" a: %s \n b: %s \n c: %s" % (id(a), id(b), id(c)))
# print(" -----")
x = [a, b, c]
# print(" x: %s \n ------ \n x[0]: %s \n x[1]: %s \n x[2]: %s" % (id(x), id(x[0]), id(x[1]), id(x[2])))
x = x + [3, 4]
# print(" -----")
# print(" x: %s \n ------ \n x[0]: %s \n x[1]: %s \n x[2]: %s" % (id(x), id(x[0]), id(x[1]), id(x[2])))
a = 3
# print(" a: %s" % (id(a)))

打印结果如下

a: 4323184656
b: 4323184688
c: 4323184656
-----
x: 4324441928
------
x[0]: 4323184656
x[1]: 4323184688
x[2]: 4323184656
-----
x: 4324441928, y: 4324441928
-----
x: 4326634696
------
x[0]: 4323184656
x[1]: 4323184688
x[2]: 4323184656
a: 4323184720

四种情况

  1. 尽量用+=,-=之类复合符号的,因为无需开辟新的,+=会自动调用 extend 方法进行合并运算, 共享引用;
  2. 【不可变对象】:如打印结果中的开始和结束a,地址是不同的,重新申请地址;
  3. 【可变对象】:无需重新申请地址,但区域可长可短;

2. 浅拷贝

不管多么复杂的数据结构,浅拷贝都只会 copy 一层;如需完整拷贝,请参考深拷贝,还记得这个图么?

浅复制

3. 深拷贝

深拷贝——即 python 的 copy 模块提供的另一个 deepcopy 方法。深拷贝会完全复制原变量相关的所有数据,在内存中生成一套完全一样的内容,在这个过程中我们对这两个变量中的一个进行任意修改都不会影响其他变量

深复制

第二部分

1. 打印 Print

日常调试,还是离不开打印的,大概了解下如何打印,有两种:

1. %
2. format

举几个简单的例子

print(" x: %s, y: %s" % (id(x), id(y)))

print("{} {}".format("hello", "world"))
print("{1} {0}".format("hello", "world"))

表格

%s    字符串 (采用str()的显示)
%r 字符串 (采用repr()的显示)
%c 单个字符
%b 二进制整数
%d 十进制整数
%i 十进制整数
%o 八进制整数
%x 十六进制整数
%e 指数 (基底写为e)
%E 指数 (基底写为E)
%f 浮点数
%F 浮点数,与上相同
%g 指数(e)或浮点数 (根据显示长度)
%G 指数(E)或浮点数 (根据显示长度)

第三部分 前期知识汇总

Python基础数据类型