لغات البرمجة نوعان فإما أن تكون لغات ذات دلالات ثابتة static semantics ومن الأمثلة عليها لغة سي وجافا وفي هذه اللغات يتوجب علينا تحديد خصائص البرنامج -مثل أنماط بيانات المتغيرات- في زمن التصريف compile time فعندما تعرف أي متغير في البرنامج يتوجب عليك تحديد نمط بيانات محدد له ولا يسمح لك بتغييره عند تنفيذ البرنامج.
وإما أن تكون لغات ذات دلالة ديناميكية dynamic semantics مثل لغة بايثون هنا تمنحنك اللغة مرونة وتمكّنك من تغيير نمط بيانات المتغير وقت تشغيل البرنامج فيمكن استخدام نفس المتغير لتخزين أنواع بيانات مختلفة مثلًا يمكن ان تسند لمتغير num عدد صحيح ثم تسند له لاحقًا في سياق التنفيذ سلسلة نصية عندها سيتغير نمط بياناته ديناميكيًا حسب سياق التنفيذ. هذا يعطي اللغة مرونة أكبر لكنه يجعلها أكثر عرضة للأخطاء.