---
title: Core Data Types in Python
date: 2026-01-01T12:25:19Z
modified: 2026-01-04T20:50:14Z
permalink: "https://www.micheledpierri.com/python/data-types/"
type: page
status: publish
excerpt: ""
wpid: 2468
featured_image: "https://www.micheledpierri.com/wp-content/uploads/2026/01/Python_04.webp"
featured_image_alt: Children dressed in lab coats are studying a python
timestamp: 2026-01-04T20:50:14Z
tags: []
---

##  Lesson Objectives

By the end of this lesson, you will be able to:

- Understand Python’s core data types
- Distinguish between numeric, textual, and logical data
- Perform basic type conversions
- Recognize why data types are critical in statistical and analytical code

This lesson is essential:

**most bugs in analytical Python code are type-related**.

---

## 1️⃣ What Is a Data Type

A data type defines:

- what kind of value a variable holds
- what operations are allowed on that value

In Python, every object has a type.

x = 10

```
<span class="line"><span style="color: #F8F8F2">x </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">10</span></span>
<span class="line"></span>
<span class="line"></span>
```

Here:

- `10` is an integer
- `x` is bound to an object of type `int`

---

## 2️⃣ Integer (`int`)

Integers represent **whole numbers**, positive or negative.

a = 10
b = -3

```
<span class="line"><span style="color: #F8F8F2">a </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">10</span></span>
<span class="line"><span style="color: #F8F8F2">b </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6">-</span><span style="color: #BD93F9">3</span></span>
<span class="line"></span>
<span class="line"></span>
```

Key properties:

- no decimal point
- arbitrary precision (no overflow in practice)

Integers are widely used for:

- counts
- indices
- categorical encodings

---

## 3️⃣ Floating Point Numbers (`float`)

Floats represent **real numbers** with decimals.

x = 3.14
y = 2.0

```
<span class="line"><span style="color: #F8F8F2">x </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">3.14</span></span>
<span class="line"><span style="color: #F8F8F2">y </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">2.0</span></span>
<span class="line"></span>
<span class="line"></span>
```

Important detail:

- floats are approximations, not exact values

Example:

print(0.1 + 0.2)

```
<span class="line"><span style="color: #8BE9FD">print</span><span style="color: #F8F8F2">(</span><span style="color: #BD93F9">0.1</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6">+</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">0.2</span><span style="color: #F8F8F2">)</span></span>
<span class="line"></span>
<span class="line"></span>
```

Output:

0.30000000000000004

```
<span class="line"><span style="color: #BD93F9">0.30000000000000004</span></span>
<span class="line"></span>
<span class="line"></span>
```

This matters **a lot** in statistics and numerical analysis.

---

## 4️⃣ Strings (`str`)

Strings represent **textual data**.

name = "Michele"
city = 'Rome'

```
<span class="line"><span style="color: #F8F8F2">name </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">Michele</span><span style="color: #E9F284">"</span></span>
<span class="line"><span style="color: #F8F8F2">city </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">'</span><span style="color: #F1FA8C">Rome</span><span style="color: #E9F284">'</span></span>
<span class="line"></span>
<span class="line"></span>
```

Strings can contain:

- letters
- numbers
- symbols

They are **not numbers**, even if they look like numbers.

x = "10"

```
<span class="line"><span style="color: #F8F8F2">x </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">10</span><span style="color: #E9F284">"</span></span>
<span class="line"></span>
<span class="line"></span>
```

This is text, not an integer.

---

## 5️⃣ Boolean (`bool`)

Booleans represent **logical values**:

is_active = True
is_empty = False

```
<span class="line"><span style="color: #F8F8F2">is_active </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">True</span></span>
<span class="line"><span style="color: #F8F8F2">is_empty </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">False</span></span>
<span class="line"></span>
<span class="line"></span>
```

Booleans are fundamental for:

- conditions
- filtering data
- decision logic

Internally, booleans behave like integers:

True == 1
False == 0

```
<span class="line"><span style="color: #BD93F9">True</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6">==</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">1</span></span>
<span class="line"><span style="color: #BD93F9">False</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6">==</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">0</span></span>
<span class="line"></span>
<span class="line"></span>
```

This has implications later in modeling and data processing.

---

## 6️⃣ Inspecting Types

You can always inspect the type of an object:

type(10)
type(3.14)
type("hello")
type(True)

```
<span class="line"><span style="color: #8BE9FD; font-style: italic">type</span><span style="color: #F8F8F2">(</span><span style="color: #BD93F9">10</span><span style="color: #F8F8F2">)</span></span>
<span class="line"><span style="color: #8BE9FD; font-style: italic">type</span><span style="color: #F8F8F2">(</span><span style="color: #BD93F9">3.14</span><span style="color: #F8F8F2">)</span></span>
<span class="line"><span style="color: #8BE9FD; font-style: italic">type</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">hello</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"><span style="color: #8BE9FD; font-style: italic">type</span><span style="color: #F8F8F2">(</span><span style="color: #BD93F9">True</span><span style="color: #F8F8F2">)</span></span>
<span class="line"></span>
<span class="line"></span>
```

Expected output:

<class 'int'>
<class 'float'>
<class 'str'>
<class 'bool'>

```
<span class="line"><span style="color: #FF79C6"><class</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">'</span><span style="color: #F1FA8C">int</span><span style="color: #E9F284">'</span><span style="color: #FF79C6">></span></span>
<span class="line"><span style="color: #FF79C6"><class</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">'</span><span style="color: #F1FA8C">float</span><span style="color: #E9F284">'</span><span style="color: #FF79C6">></span></span>
<span class="line"><span style="color: #FF79C6"><class</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">'</span><span style="color: #F1FA8C">str</span><span style="color: #E9F284">'</span><span style="color: #FF79C6">></span></span>
<span class="line"><span style="color: #FF79C6"><class</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">'</span><span style="color: #F1FA8C">bool</span><span style="color: #E9F284">'</span><span style="color: #FF79C6">></span></span>
<span class="line"></span>
<span class="line"></span>
```

This is a primary debugging tool.

---

## 7️⃣ Type Conversion (Casting)

Python allows explicit type conversion.

### Common Conversions

int("10")
float("3.14")
str(100)
bool(1)

```
<span class="line"><span style="color: #8BE9FD; font-style: italic">int</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">10</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"><span style="color: #8BE9FD; font-style: italic">float</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">3.14</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"><span style="color: #8BE9FD; font-style: italic">str</span><span style="color: #F8F8F2">(</span><span style="color: #BD93F9">100</span><span style="color: #F8F8F2">)</span></span>
<span class="line"><span style="color: #8BE9FD; font-style: italic">bool</span><span style="color: #F8F8F2">(</span><span style="color: #BD93F9">1</span><span style="color: #F8F8F2">)</span></span>
<span class="line"></span>
<span class="line"></span>
```

### Dangerous Conversion

int("ten")

```
<span class="line"><span style="color: #8BE9FD; font-style: italic">int</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">ten</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"></span>
<span class="line"></span>
```

This raises an error.

Type conversion is **explicit by design** — Python avoids silent errors.

---

## 8️⃣ Operations and Types

The result of an operation depends on the involved types.

10 + 2      # int
10 + 2.0    # float
"10" + "2"  # string concatenation

```
<span class="line"><span style="color: #BD93F9">10</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6">+</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">2</span><span style="color: #F8F8F2">      </span><span style="color: #6272A4"># int</span></span>
<span class="line"><span style="color: #BD93F9">10</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6">+</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">2.0</span><span style="color: #F8F8F2">    </span><span style="color: #6272A4"># float</span></span>
<span class="line"><span style="color: #E9F284">"</span><span style="color: #F1FA8C">10</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6">+</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">2</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">  </span><span style="color: #6272A4"># string concatenation</span></span>
<span class="line"></span>
<span class="line"></span>
```

Understanding this behavior is essential for numerical correctness.

---

## 9️⃣ Why Data Types Matter in Data Analysis

In analytical workflows, data types determine:

- mathematical correctness
- memory usage
- performance
- model behavior

Example:

- `"5"` vs `5` can silently break an analysis
- floats introduce rounding errors
- booleans often encode clinical or experimental conditions

Good analysts are **obsessive about types**.

---

## FAQ — Frequently Asked Questions

**Q: Is Python strongly typed?**

A: Yes. Every object has a type, even if you don’t declare it.

**Q: Why does Python allow `True == 1`?**

A: For historical and logical consistency, but this must be used carefully.

**Q: Should I always use floats for numbers?**

A: No. Use integers when values are counts or categories.

**Q: Can I mix types freely?**

A: Python allows it, but analytical code should minimize ambiguity.

---

## Exercises (10)

### Exercise 1

Create an integer variable called `n_patients`.

### Exercise 2

Create a float variable called `mean_age`.

### Exercise 3

Create a string variable called `study_name`.

### Exercise 4

Create a boolean variable called `is_valid`.

### Exercise 5

Check the type of all variables above.

### Exercise 6

Convert a string `"25"` to an integer.

### Exercise 7

Convert an integer `5` to a string.

### Exercise 8

Predict the output:

print(5 + 2.0)

```
<span class="line"><span style="color: #8BE9FD">print</span><span style="color: #F8F8F2">(</span><span style="color: #BD93F9">5</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6">+</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">2.0</span><span style="color: #F8F8F2">)</span></span>
<span class="line"></span>
<span class="line"></span>
```

### Exercise 9

Predict the output:

print("5" + "2")

```
<span class="line"><span style="color: #8BE9FD">print</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">5</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6">+</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">2</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"></span>
<span class="line"></span>
```

### Exercise 10

Explain why this is dangerous in data analysis:

value = "10"
result = value + "5"

```
<span class="line"><span style="color: #F8F8F2">value </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">10</span><span style="color: #E9F284">"</span></span>
<span class="line"><span style="color: #F8F8F2">result </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> value </span><span style="color: #FF79C6">+</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">5</span><span style="color: #E9F284">"</span></span>
<span class="line"></span>
<span class="line"></span>
```

---

## Solutions

Exercise 1

n_patients = 120

```
<span class="line"><span style="color: #F8F8F2">n_patients </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">120</span></span>
<span class="line"></span>
<span class="line"></span>
```

Exercise 2

mean_age = 67.4

```
<span class="line"><span style="color: #F8F8F2">mean_age </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">67.4</span></span>
<span class="line"></span>
<span class="line"></span>
```

Exercise 3

study_name = "CABG_outcomes"

```
<span class="line"><span style="color: #F8F8F2">study_name </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">CABG_outcomes</span><span style="color: #E9F284">"</span></span>
<span class="line"></span>
<span class="line"></span>
```

Exercise 4

is_valid = True

```
<span class="line"><span style="color: #F8F8F2">is_valid </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">True</span></span>
<span class="line"></span>
<span class="line"></span>
```

Exercise 5

type(n_patients)
type(mean_age)
type(study_name)
type(is_valid)

```
<span class="line"><span style="color: #8BE9FD; font-style: italic">type</span><span style="color: #F8F8F2">(n_patients)</span></span>
<span class="line"><span style="color: #8BE9FD; font-style: italic">type</span><span style="color: #F8F8F2">(mean_age)</span></span>
<span class="line"><span style="color: #8BE9FD; font-style: italic">type</span><span style="color: #F8F8F2">(study_name)</span></span>
<span class="line"><span style="color: #8BE9FD; font-style: italic">type</span><span style="color: #F8F8F2">(is_valid)</span></span>
<span class="line"></span>
<span class="line"></span>
```

Exercise 6

int("25")

```
<span class="line"><span style="color: #8BE9FD; font-style: italic">int</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">"</span><span style="color: #F1FA8C">25</span><span style="color: #E9F284">"</span><span style="color: #F8F8F2">)</span></span>
<span class="line"></span>
<span class="line"></span>
```

Exercise 7

str(5)

```
<span class="line"><span style="color: #8BE9FD; font-style: italic">str</span><span style="color: #F8F8F2">(</span><span style="color: #BD93F9">5</span><span style="color: #F8F8F2">)</span></span>
<span class="line"></span>
<span class="line"></span>
```

Exercise 8

# Output: 7.0

```
<span class="line"><span style="color: #6272A4"># Output: 7.0</span></span>
<span class="line"></span>
<span class="line"></span>
```

Exercise 9

# Output: "52"

```
<span class="line"><span style="color: #6272A4"># Output: "52"</span></span>
<span class="line"></span>
<span class="line"></span>
```

Exercise 10

# String concatenation instead of numeric addition

```
<span class="line"><span style="color: #6272A4"># String concatenation instead of numeric addition</span></span>
<span class="line"></span>
<span class="line"></span>
```

---

## Next Lesson Preview

In **Lesson 05**, we will introduce:

- conditional logic (`if`, `else`)
- loops (`for`, `while`)
- control flow as the basis of algorithmic thinking

## This is where Python starts to **reason**, not just store data.