如何避免Python中list1随shuffle_cards同步更新?
问题:修改shuffle_cards时list1同步变更的解决方法
你的代码如下:
num_cards=8 list1=[1,2,3,4,5,6,7,8] shuffle_cards=list1 for j in range(0,num_cards//2): shuffle_cards.insert((2*j)+1,shuffle_cards[(num_cards//2)+(2*j)]) shuffle_cards=shuffle_cards[0:num_cards] print(shuffle_cards) print(list1)
问题出在shuffle_cards=list1这一行:Python里列表是可变对象,直接赋值只是让两个变量指向同一个内存地址的列表对象,并非创建新的副本。所以你后续对shuffle_cards执行的插入操作,本质上是在修改那个共享的列表,list1自然也会跟着变化。
要让shuffle_cards成为独立的列表,你需要创建list1的副本,常用的三种方式:
- 使用切片语法:
shuffle_cards = list1[:] - 使用list构造器:
shuffle_cards = list(list1) - 调用列表的copy方法:
shuffle_cards = list1.copy()
修改后的完整代码示例:
num_cards=8 list1=[1,2,3,4,5,6,7,8] # 创建list1的独立副本 shuffle_cards=list1.copy() for j in range(0,num_cards//2): shuffle_cards.insert((2*j)+1,shuffle_cards[(num_cards//2)+(2*j)]) shuffle_cards=shuffle_cards[0:num_cards] print(shuffle_cards) print(list1)
这样运行后,shuffle_cards的修改就不会影响到list1了。
内容的提问来源于stack exchange,提问作者Anirudh SV
相关产品推荐
相关产品推荐

