|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- import threading
- class P(threading.Thread):
- def __init__(self,url):
- super().__init__()
- self.url = url
- url = [i for i in range(10)]
- p1 = P(url)
- p2 = P(url)
- a = p1.url.pop()
- print(p1.url)
- print(p2.url)
- print(url)
复制代码 为啥这3个都是一样的啊 求解释啊 大佬们 谢谢谢谢!!!
本帖最后由 suchocolate 于 2020-12-7 23:30 编辑
向函数传列表默认是引用传递,就是传列表的地址,想传拷贝,可以ls[:]: - class P:
- def __init__(self, ls):
- self.ls = ls
- print('对象', self, '的列表地址:', id(ls))
- if __name__ == '__main__':
- ls0 = [i for i in range(10)]
- print('ls0列表地址:', id(ls0))
- print('ls0列表:', ls0)
- p1 = P(ls0[:]) # 这里是拷贝,是生成的新列表,地址是不同的
- p2 = P(ls0) # 这里是传引用,使用的是ls0,
- p1.ls.pop() # 拷贝弹1个元素
- p2.ls.pop() # ls0弹2个元素出去
- p2.ls.pop()
- print('p1的列表', p1.ls)
- print('p2的列表', p2.ls)
复制代码
|
|