strLst 里最后一个元素本身是一个可修改的list,copyLst最后一个元素引用的也是这个对象,修改它当然也会导致原strLst 的最后一个对象内容发生变化。 而strLst 前几个元素是字符串 (不可改对象),你没有办法修改他们,copyLst[1] = 'zzz' 这样的语句只是让copyLst[1] 引用了不同的对象。
关于可修改 (mutable) 对象和不可修改对象(immutable)使用上的区别,建议你再去翻翻python的文档。
针对你的list特点,可以用下面这个简单的解决方法(注: 不适用于其他list 复制,比如list的某个元素本身又是一个包含有list的list):
import typesstrLst=['hi', 'mom', 'dad', ['xxx', 'yyy']]
copyLst = [x[:] if type(x) is typesListType else x for x in strLst]
此时修改copyLst 不会影响原始list
Python中列表常见的方法有哪些?
Python列表定义:按特定顺序排列的元素组成。在Python中,用方括号[]来表示列表,并用逗号来分隔其中的元素。Python列表是编程中很常见的数据类型 。
列表是一种可修改的集合类型,其元素可以是数字、string等基本类型,也可以是列表、元组、字典等集合对象,甚至可以是自定义的类型。其定义方式如下:>>> nums = [1,2,3,4]>>> type(nums)>>> print nums[1, 2, 3, 4]>>> strs = ["hello","world"]>>> print strs['hello', 'world']>>> lst = [1,"hello",False,nums,strs]>>> type(lst)>>> print lst[1, 'hello', False, [1, 2, 3, 4], ['hello', 'world']]
下面我们来看一下列表中有哪些常见的方法:count():统计某个元素在列表中出现的次数。index():从列表中找出某个值第一个匹配项的索引位置。append():在列表末尾添加新对象。extend():在列表末尾一次性追加另一个序列的多个值。insert():在列表的指定位置插入对象。pop():移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。remove():移除列表中某个值的第一个匹配项。reverse():将列表中的元素反向,不重新拷贝一个列表。reversed():将列表中的元素反向,重新拷贝一个列表。sort():将列表中的元素排序,不重新拷贝一个列表。sortd():将列表中的元素排序,重新拷贝一个列表。copy():浅拷贝,只是给原来的列表贴上了一个新标签,对于一个复杂对象的子对象并不会完全复制,如果有子列表,改变原来的值,新的拷贝对象也会改变。deepcopy():深拷贝,将复杂对象的每一层复制一个单独的个体出来。就是完全拷贝。常见内置函数:max()、min()、sum()、len()、all()、any()、zip()、enumerate()由于文章篇幅有限,具体的代码,推荐大家看这篇文章:>
第一个问题:因为主进程已经结束,相关的资源已经释放,而线程还在后台运行,所以会导致线程找不到相关的资源和定义
第二个问题:因为主程序结束的时候,并没有等待子线程结束,也没有强制关闭子线程,因此还在后台运行,有两个办法可以让他们同时结束,一个办法是在在构建进程的时候增加参数 deamon=True, 第二个办法就是在程序最后增加thread1join(),thread2join()
python判断是否继续是因为你的代码发生了错误。
在执行第一个文件后,程序停止并询问是否继续批处理。这会导致用户输入延迟。希望我的回答能够帮到你,如果不明白,您可以继续追问!谢谢!祝您生活愉快!
举例区分Python中的浅复制与深复制
这篇文章主要介绍了举例区分Python中的浅复制与深复制,是Python入门学习中的重要知识,需要的朋友可以参考下
copy模块用于对象的拷贝 *** 作。该模块非常简单,只提供了两个主要的方法: copycopy 与 copydeepcopy ,分别表示浅复制与深复制。什么是浅复制,什么是深复制,网上有一卡车一卡车的资料,这里不作详细介绍。复制 *** 作只对复合对象有效。用简单的例子来分别介绍这两个方法。
浅复制只复制对象本身,没有复制该对象所引用的对象。
#coding=gbk
import copy
l1 = [1, 2, [3, 4]]
l2 = copycopy(l1)
print l1
print l2
l2[2][0] = 50
print l1
print l2
#---- 结果 ----
[1, 2, [3, 4]]
[1, 2, [3, 4]]
[1, 2, [50, 4]]
[1, 2, [50, 4]]
同样的代码,使用深复制,结果就不一样:
import copy
l1 = [1, 2, [3, 4]]
l2 = copydeepcopy(l1)
print l1
print l2
l2[2][0] = 50
print l1
print l2
#---- 结果 ----
[1, 2, [3, 4]]
[1, 2, [3, 4]]
[1, 2, [3, 4]]
[1, 2, [50, 4]]
改变copy的默认行为
在定义类的时候,通过定义__copy__和__deepcopy__方法,可以改变copy的默认行为。下面是一个简单的例子:
class CopyObj(object):
def __repr__(self):
return "CopyObj"
def __copy__(self):
return "Hello"
obj = CopyObj()
obj1 = copycopy(obj)
print obj
print obj1
#---- 结果 ----
CopyObj
Hello
以上就是关于python里面的列表复制全部的内容,包括:python里面的列表复制、python 获取列表元素有几种方式,常见的是哪种、python 主程序结束的时候线程是否结束问题2个问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)