为什么对n操作结果l也一起跟着变了?

题设给了一个数列,要求输出的数列和原始数列的内部格式完全相同。

img


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,您可以试试看。


  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7562363
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:三子棋【入门保姆级】(可以转化为N字棋)
  • 除此之外, 这篇博客: 7-ELEVEn中的“n”为啥要小写?❤️答案匪夷所思!最后却引出一个...中的 6. 爬虫实例中的大小写 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 在分析爬取出的网页中,“变量名以及变量读取出的变量值”,还有“网址中的参数”等等都要考虑到字母大小写问题,以下是我在练习做爬虫中碰到的实例,一不小心出过好多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中还有哪些大小写问题需要特别关注的?有想到的请留言补充——