动态打字意味着记忆位置的改变还是价值的改变?

2024-05-16 06:40:54 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我是正确的,那么动态类型就是,例如,在Python中

x=1
x='abc'

x可以在运行时的不同点引用不同类型的值。

在上面的例子中,x指的是这里

  • 名称即标识符x
  • x所指的内存
  • 还是别的什么?在

我的问题是一般编程语言中动态类型的概念,而不是Python特有的,尽管我们可以用Python作为例子。

通常在编程语言中,而不仅仅是Python,动态类型是指以下哪种解释:

  1. 一个名字在不同的点被绑定到不同的记忆位置 在运行时中,不同的内存位置存储 不同的类型。

    这听起来像是动态更改名称和之间的绑定 一个对象,例如动态范围的特定用法,当更改名称所引用的对象时,它也碰巧更改了所引用对象的类型。因此,动态作用域的具体用法看起来类似于动态类型,在这两种情况下对象的类型都会发生变化。

    那么,如果这一点是正确的,那么动态类型和动态作用域的特殊用法有什么区别呢?

  2. 一个名字被绑定到一个固定的记忆位置 存储一些值,我们可以更改存储的值及其类型 在运行时的内存中。

  3. 或者别的什么东西

谢谢。


Tags: 对象记忆内存名称类型用法动态标识符
2条回答

您需要在context中研究动态类型;这里的上下文是静态类型的对比概念。在

C、C++和java都是静态类型语言,在编译时,你可以修复一个变量可以引用什么类型的EM>。Python的变量不是这样固定的;您没有指定变量的类型。变量只是对对象的引用,因此类型x引用是在运行时确定的。在

所以x名称,标识符。在Python中,它是无类型的。在静态语言中,它被分配了一个类型。通常,在实现方面,静态类型化语言只需将源代码中的变量名转换为编译代码引用的内存地址,但Python中并非如此。在

作为一个Python开发人员,Python如何实际实现名称并不需要担心,并且可能会因具体实现而有所不同。在CPython中(从Python.org网站),标识符是对中特定位置的引用,堆是为Python对象保留的内存区域。对象会根据需要动态地添加到堆中或从堆中移除。在

动态范围界定似乎完全不同。来自wikipedia

With dynamic scope, a global identifier refers to the identifier associated with the most recent environment, and is uncommon in modern languages.[4] In technical terms, this means that each identifier has a global stack of bindings. Introducing a local variable with name x pushes a binding onto the global x stack (which may have been empty), which is popped off when the control flow leaves the scope. Evaluating x in any context always yields the top binding. Note that this cannot be done at compile-time because the binding stack only exists at run-time, which is why this type of scoping is called dynamic scoping.

所以不,这和动态范围界定没有任何关系。在

相关问题 更多 >