5.18 每日小三练

简述Python的字符串驻留机制?

含义:字符串驻留是一种在内存中仅保存一份相同且不可变字符串的方法(Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量),类似数据库的存储过程。

使用方法:1>系统维护interned字典,记录已被驻留的字符串对象。

                  2>当字符串对象a需要驻留时,先在interned检测是否存在,若存在则指向存在的字符串对象,a的引用计数减1;若不存在,则记录a到interned中。

什么时候会用到字符串驻留机制:1>字符串长度为0或1时,默认采用驻留机制。

                                                      2>字符串长度大于1时,且字符串中只包含大小写字母、数字、下划线时,采用驻留机制。

                                                      3>字符串只在编译时进行驻留,而非运行时(.pyc文件)。

                                                      4>用乘法得到的字符串,如果结果长度 <=20且字符串只包含数字、字母大小写、下划线,支持驻留。长度>20,不支持驻留。这样的设计目的是为了保护.pcy文件不会被错误代码搞的过大。

                                                      5>对于[-5,256]之间的整数数字,Python默认驻留。

                                                      6>Pyhton提供intern方法强制2个字符串指向同一个对象。

Python 一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。

import math
 
for i in range(2, 1000):
    factors = []  #i 每次循环都清空
    for j in range(1, math.floor(i/2)+1):
        if i%j == 0:
            factors.append(j)
    if sum(factors) == i:
print(i, end=',')

如何在Python中拷贝一个对象, 并说明他们之间的区别?

有三种方法:赋值、浅拷贝、深拷贝

区别:

赋值:只是复制了新对象的引用,不会开辟新的内存空间。

浅拷贝:创建新对象,其内容是原对象的引用。

#三种方法:
"""
#切片操作:
lst = [1,2,3,[4,5]] 
lst1 = lst[:]    #或者:lst1 = [each for each in lst]
"""

"""
#工厂函数:
lst = [1,2,3,[4,5]] 
lst1 = list(lst)
"""

#copy函数
lst = [1,2,3,[4,5]] 
lst1 = copy.copy(lst)

浅拷贝之所以称为浅拷贝,是它仅仅只拷贝了一层,在lst中有一个嵌套的list[4,5],如果我们修改了它,情况就不一样了。

深拷贝:只有一种形式,copy模块中的deepcopy函数; 和浅拷贝对应,深拷贝拷贝了对象的所有元素,包括多层嵌套的元素;深拷贝出来的对象是一个全新的对象,不再与原来的对象有任何关联。(copy.deepcopy

  1. #1.外层添加元素时, 浅拷贝c不会随原列表a变化而变化;内层list添加元素时,浅拷贝c才会变化。
  2. #2.无论原列表a如何变化,深拷贝d都保持不变。
  3. #3.赋值对象随着原列表一起变化
原文地址:https://www.cnblogs.com/ljy123/p/12913814.html