python中的“容器”到底是什么? (以及所有的python容器类型是什么?) - python

python文档经常提到“容器”。 E.g.:

如果check_circular为False(默认值:True),则通告
容器类型的参考检查将被跳过,并发出一个通知
引用将导致OverflowError(或更糟)。

但是我找不到容器的任何正式定义,也没有找到它们的列表。

编辑

对于Python 2.7.3:

检查为容器的内置类型:

(isinstance(object, collections.Container)返回True)

  • 定义了__contains__方法的容器:
  • 所有内置序列类型:列表,字节数组,字符串,unicode字符串和
    元组。
  • 字典
  • 所有内置集合类型:集合和Frozensets
  • 没有定义__contains__方法的容器:
  • xrange对象
  • 已检查不是容器的内置类型:

    (isinstance(object, collections.Container)返回False):

  • Int对​​象
  • 浮动对象
  • 长对象
  • 布尔对象
  • 模块对象
  • 文件对象
  • 缓冲对象
  • None对象
  • 告诉我您检查了isinstance(object, collections.Container)的其他哪些内置类型,我将它们添加到列表中。

    参考方案

    容器是包含任意数量其他对象的任何对象。通常,容器提供了一种访问包含的对象并对其进行迭代的方法。

    容器的示例包括tuplelistsetdict;这些是内置容器。 collections 模块中提供了更多容器类型。

    严格来说, collections.abc.Container 抽象基类(Python2中的 collections.Container )适用于通过in magic方法支持__contains__运算符的任何类型;因此,如果您可以编写x in y,则y通常是一个容器,但并不总是这样:容器与常规可迭代对象之间的重要区别在于,在迭代时,容器将返回它们持有引用的现有对象,而生成器和例如file对象每次都会创建一个新对象。这对垃圾回收和深度对象遍历(例如deepcopy和序列化)有影响。

    例如,iter(lambda: random.choice(range(6)), 0)支持in运算符,但它肯定不是容器!
    Collections.abc.Container抽象基类的目的仅是考虑__contains__魔术方法,而不考虑其他支持in运算符的方法是,一个真正的容器应该能够在单个操作中测试包含性,而无需观察到内部状态的改变。由于Collections.abc.Container__contains__定义为抽象方法,因此可以确保如果isinstance(x, collections.abc.Container)x支持in运算符。

    因此,实际上,所有容器都将具有__contains__ magic方法。但是,在测试对象是否为容器时,应使用isinstance(x, collections.abc.Container)进行清晰说明和向前兼容,以便更改Container子类检查。

    Python GPU资源利用 - python

    我有一个Python脚本在某些深度学习模型上运行推理。有什么办法可以找出GPU资源的利用率水平?例如,使用着色器,float16乘法器等。我似乎在网上找不到太多有关这些GPU资源的文档。谢谢! 参考方案 您可以尝试在像Renderdoc这样的GPU分析器中运行pyxthon应用程序。它将分析您的跑步情况。您将能够获得有关已使用资源,已用缓冲区,不同渲染状态上…

    Python:图像处理可产生皱纹纸效果 - python

    也许很难描述我的问题。我正在寻找Python中的算法,以在带有某些文本的白色图像上创建皱纹纸效果。我的第一个尝试是在带有文字的图像上添加一些真实的皱纹纸图像(具有透明度)。看起来不错,但副作用是文本没有真正起皱。所以我正在寻找更好的解决方案,有什么想法吗?谢谢 参考方案 除了使用透明性之外,假设您有两张相同尺寸的图像,一张在皱纹纸上明亮,一张在白色背景上有深…

    Python uuid4,如何限制唯一字符的长度 - python

    在Python中,我正在使用uuid4()方法创建唯一的字符集。但是我找不到将其限制为10或8个字符的方法。有什么办法吗?uuid4()ffc69c1b-9d87-4c19-8dac-c09ca857e3fc谢谢。 参考方案 尝试:x = uuid4() str(x)[:8] 输出:"ffc69c1b" Is there a way to…

    Python sqlite3数据库已锁定 - python

    我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…

    Python:如何停止多线程的numpy? - python

    我知道这似乎是一个荒谬的问题,但是我必须在与部门中其他人共享的计算服务器上定期运行作业,当我开始10个作业时,我真的希望它只占用10个核心而不是更多;我不在乎每次运行一个内核所需的时间是否更长:我只是不想让它侵犯其他人的领土,这将需要我放弃工作等等。我只想拥有10个核心,仅此而已。更具体地说,我在基于Python 2.7.3和numpy 1.6.1的Redh…