PYTHON错误——”赋值“ 和 ”拷贝“
# 关于自己写的代码有个逻辑没有问题,但是代码有问题的错误。本质上是关于“拷贝”和“赋值”的错误。 # 我想将每次大循环后x["x1"]的结果保存到a中。 # 即:a: [[0, 1], [0, 1, 0, 1]] # 但是我得到的结果:[[0, 1, 0, 1], [0, 1, 0, 1]] ''' python 列表的赋值:a = [1,2,3], b = a;相当于a和b都指向同一块内存空间;即指针相同; python 列表的拷贝:a = [1,2,3], b = a;相当于b在内存中开辟了另一块内存空间,存储的值为a列表的值; ''' import copy print("-"*100, "“赋值”代码", "-"*100) # TODO 1. “赋值”代码 x = { "x1": [], "x2": [] } a = [] for i in range(2): for j in range(2): x["x1"].append(j) a.append(x["x1"]) for i in range(len(a)): print("id(a[i])", id(a[i])) print("value(a[i])", a[i]) # TODO 2. “拷贝”代码 print("-"*100, "“拷贝”代码", "-"*100) x = { "x1": [], "x2": [] } a = [] for i in range(2): for j in range(2): x["x1"].append(j) a.append(copy.copy(x["x1"])) for i in range(len(a)): print("id(a[i])", id(a[i])) print("value(a[i])", a[i]) ''' ---------------------------------------------------------------------------------------------------- “赋值”代码 ---------------------------------------------------------------------------------------------------- id(a[i]) 3047084190464 value(a[i]) [0, 1, 0, 1] id(a[i]) 3047084190464 value(a[i]) [0, 1, 0, 1] ---------------------------------------------------------------------------------------------------- “拷贝”代码 ---------------------------------------------------------------------------------------------------- id(a[i]) 3047084210816 value(a[i]) [0, 1] id(a[i]) 3047084190464 value(a[i]) [0, 1, 0, 1] # 解释 3047084190464 == 3047084190464 :第一次,赋值相当于多个引用,指针 3047084210816 == 3047084190464 :第二次,拷贝相当于新开辟空间存储 '''