|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
Python能直接用赋值语句复制列表吗?
刚刚接触python列表,向大佬求助:为什么一定要用切片和copy()复制列表,与直接赋值有什么差别
以下是昨天学python时的一串代码,用来将列表a的内容复制到列表b上:
老师说这样是错的,要用或
求助大佬,这三种方法有什么区别啊?
本帖最后由 player-none 于 2026-5-4 15:12 编辑
Python 的变量机制比较独特,不是在一个贴上 <变量名> 的箱子里放 <变量内容>,而是在 <变量内容> 上贴写着 <变量名> 的标签。
- a = [1,2,3,4,5]
- b = a
- # 以上代码在 [1,2,3,4,5] 上贴了两个标签:a, b。
- # 所以,如果你执行 a.append(6),b 也会同时增加一个 6。
- # 注:a += [6] 等效于 a.extend([6]) 等效于 a.append(6)。
复制代码
然而,
- a = 1
- b = a
- a += 1
- # 此时 a == 1, b == 2
复制代码
Python 有可变/量、不可变/量之分。list, dict, set, 自定义对象等为前者,int, float, str 等为后者。不可变量没有那种“量子纠缠”。
---------------分界线----------------- 以上是你上网搜会遇到的常见答案。
我来补充:可变量、不可变量之差别实际在于,不可变量你改它它会给你一个新的东西,相当于把箱子上的标签移到新的箱子上,这是改变不可变量的唯一途径;可变量 一般改变原有的东西,相当于改变箱子里的东西。
当然,可变量也有像不可变量一样的操作,比如:
【紧急修改】错误内容已修改完毕
- a = [1,2,3,4,5]
- b = a
- a = a + [6]
- # b 不会变,因为 a = a + [6] 的结果 [1,2,3,4,5,6] 是程序新算出来的东西
- # 注:a = a + [6] 不等于 a += [6]!!!!!!
复制代码
再补充一点:可变量的“量子纠缠”实际中也有应用,比如跨程序的 import,常常会用到其他程序里的变量,可以用这种方法在不同程序间保持“量子纠缠”:
- # a.py
- name = ['fishc']
- def speak_name():
- print(name[0])
- # b.py
- num = [123456]
- def speak_num():
- print(num[0])
- # c.py
- from a import *
- from b import *
- speak_name()
- name[0] = 'python'
- speak_name()
- speak_num()
- num[0] = 114514
- speak_num()
复制代码
|
|