题设给了一个数列,要求输出的数列和原始数列的内部格式完全相同。
l = [1,4]
n = l #这个相当于软连接的形式,和 n = l = [1,4] 效果一样的,内存地址不变
# n = l.copy() #这个是浅拷贝,会复制一个新的内存地址,不管修改那个变量,都不会对其他变量的数据有影响
print(n)
print(l)
# 查看内存地址
print(id(n))
print(id(l))
l[1] = 5
print(n)
print(l)
n=l这样子的话,n和l是指向同一个数列的,不是两份
b=a 是指将b指向了a 同一个列表,并不是复制了一份列表。
您的n和l本是指向同一list的两个标签。您对她们的操作,都是对同一个list操作。
这是python 的特性,在平常码码时一定谨记了,要不达不成您的预期还找不到问题所在。您可以点击蓝色文字跳转翻阅我的回答Python 列表的特性。您可以用id(n)
、id(l)查看列表对象内存地址,必然相同,n is l 和 l is n都是True,您可以试试看。
在分析爬取出的网页中,“变量名以及变量读取出的变量值”,还有“网址中的参数”等等都要考虑到字母大小写问题,以下是我在练习做爬虫中碰到的实例,一不小心出过好多bug:
content = ('Java','JavaScript','Python')
website = 'http://*****.com/xxxx?xx='
userName = ['Abc','HannYang',......]for c in content:
rank,ids = [],[]
url = website + c.lower()
res = requests.get(url,headers={'User-Agent':agent}).json()
if res["code"] == 200:
data = res["data"]['RankListItem']
rank += [r for r in data]
count = 0
for i,r in enumerate(rank):
if r['userName'].lower() in userName:
......【解决方法】
1. 在字串比较时双方都用upper()或lower()
2. 或者用正则表达式时使用IGNORECASE标志
Python中还有哪些大小写问题需要特别关注的?有想到的请留言补充——