来一个形象的比喻,比如有
A, B, C, D四个人,我给A起名为项羽,然后我让B,C,D的名字为A,随后我改了B的名字为刘邦,结果A,C,D三个人也同时改了名字,
a = [1, 2, 3, 4, 5, 6]
b = a
b.append('w')
print(a)
[1, 2, 3, 4, 5, 6, 'w']
运行的结果是a也同步改变了
将a与b以及其他的人直接赋值到列表,但是这样不够简便假如我有一串很长的数据
假如这是一串很多数据的列表,我需要对这串列表做不同的改动分别保存,那么我应该怎样赋值,才能让a,b,c,d各自变化互不影响,
谢谢解答。
首先要分清:什么是可变类型数据,什么是不可变类型数据
其次要分清:python的变量与具体数据之间的关系是绑定关系,可以看作是贴标签
你上面就是同一个数据贴了好几个标签,按照某个标签找到了数据,然后又把数据给改了,其它的标签访问的就是这个改了的数据。
弄懂了原理,只要把原始数据换成一个新的地址,原来的标签就再也找不到现在改动的数据了
比如:
b = a[:]
b = [i for i in a]
b = a.copy()
b = list(a)
这四种都可以
a = [1, 2, 3, 4, 5, 6]
b = list(a)
b.append('w')
print(a)
print(b)
你需要了解一下python的深拷贝和浅拷贝.
对于数组字符串这些,赋值只相当于给它改了一个名字,两个名字指向的是同一个东西,这是浅拷贝.
深拷贝则是创建一个完全不一样的东西
import copy
a=[1,2,3]
b=copy.deepcopy(a)
这样就能拷贝一个互不影响的出来