为何Python中多变量指向同一列表时,修改其一其余也同步变化?
为什么修改list_one后list_two也跟着变化?
你的代码和输出如下:
arr = [1,2,3,4,5] list_one = arr list_two = arr list_one.pop(0) print(list_one) print(list_two) # Output: # [2, 3, 4, 5] # [2, 3, 4, 5]
问题的核心在于Python对可变对象的赋值逻辑:
- 列表是可变对象,当你执行
list_one = arr、list_two = arr时,并没有复制arr的内容,而是让list_one和list_two都指向同一个内存地址里的原列表对象。 pop()是原地修改列表的方法——它直接在原列表对象上删除元素,不会生成新的列表对象。所以不管你用哪个指向该对象的变量调用pop(),修改的都是同一个底层列表。
如果想让list_two保留原列表的内容,你需要创建原列表的副本,而不是直接赋值引用。常见的创建副本的方式有三种:
- 使用切片语法:
list_two = arr[:] - 使用
list()构造函数:list_two = list(arr) - 使用列表的
copy()方法:list_two = arr.copy()
修改后的示例代码:
arr = [1,2,3,4,5] list_one = arr list_two = arr.copy() # 创建副本 list_one.pop(0) print(list_one) # 输出: [2, 3, 4, 5] print(list_two) # 输出: [1, 2, 3, 4, 5]
内容的提问来源于stack exchange,提问作者Puneet
相关产品推荐
相关产品推荐

