动态类型是指内存位置的改变还是值的改变?

Does dynamic typing mean change of memory place or change of value?

如果我是正确的,动态类型是,例如,在 Python

x=1
x='abc'

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

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

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

一般在编程语言中,不只是Python,以下哪项解释是指动态类型:

  1. 一个名字在不同的点绑定到不同的内存位置 在 运行 时间内,不同的内存位置存储值 不同种类。

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

    那么,如果这是真的,那么动态类型和动态作用域改变类型的特定用法之间有什么区别?

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

  3. 或其他

谢谢。

您需要在上下文中查看动态类型;这里的上下文是 static typing.

的对比概念

C、C++ 和 Java 都是静态类型语言,您可以在编译时 固定变量可以引用的类型。 Python的变量不是那样固定的;您没有指定变量的类型。变量只是对对象的引用,因此类型 x 引用是在运行时确定的。

所以 xname,标识符。在 Python 中它是无类型的。在静态语言中,它被分配了一个类型。通常,在实现方面,静态类型语言会简单地将源代码中的变量名转换为编译代码引用的内存地址,但在 Python.

中并非如此。

Python 如何实际实现名称不是您作为 Python 开发人员需要担心的事情,并且可能因具体实现而异。在 CPython(您从 Python.org 下载的实现)中,标识符是对 中特定位置的引用,这是为 [=32= 保留的内存区域] 对象。根据需要动态地在堆中添加和删除对象。

动态范围似乎是完全不同的东西。来自 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.

所以不,这与动态作用域无关。