本文主要是介绍老板,来一斤BUG!——Python,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
2019/3/3:
Python中的列表赋值:
import copydef ID(x):id_x = [id(i) for i in x]id_x.insert(0, id(x))print(x, id_x)return id_x# print(id(1))a = [1, [2, 3]] # 创建 列表list,将其前两指向,分别指向 1 2,再创建新变量a,使其指向该列表
# 因为是新变量,所以 a 有自己的地址
b = a # b 指向 a 所指的对象,即该列表,若 此后 a 更改指向,b不变;
# 若 a所指的对象:该列表[1,2]改变,a、b均改变
c = a[:] # 创建新变量c, 令其 直接指向 a所指列表内指向的元素
d = [i for i in a] # 创建新变量d, 令其 直接指向 a所指列表内指向的元素
e = a.copy() # 创建新变量e, 令其 直接指向 a所指列表内指向的元素
f = copy.copy(a) # 同上,也即 ------>浅拷贝<------
g = copy.deepcopy(a) # 深拷贝,令其 直接指向,a 所指列表内指向的元素, 以及 元素的所指元素...etc
ID(a)
ID(b)
ID(c)
ID(d)
ID(e)
ID(f)
ID(g)a[0] = 50 # 这里的具体操作是:找到 a所指——>该列表[1,[2,3]], 更改其第0个指向,由1变为 50
ID(a) # a 指向 该列表,该列表改变,故 a 的第一个元素改变
ID(b) # 同上
ID(c) # 该列表改变了指向,但 c 直接指向该列表一开始所指的元素,故 c 不变
ID(d) # 同上
ID(e) # 同上
ID(f) # 同上
ID(g) # 同上a[1][0] = 60
ID(a) # 该列表的指向未改变,但该列表的子列表改变了指向,故 a 变
ID(b) # 同上
ID(c) # 同上
ID(d) # 同上
ID(e) # 同上
ID(f) # 同上
ID(g) # 因为是深拷贝, 故不变
参考:一切都是对象,一切都是指针,一切都是东西(python的编程哲学)
这篇关于老板,来一斤BUG!——Python的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!