Python random.seed() function to initialize the pseudo-random number generator

By | February 8, 2022

In this Python tutorial, you will learn how to use the random.seed() function to initialize pseudo-random number generator to generate the same random data every time.

Practically computers do not generate truly random numbers, it uses a seed value as a base or starting point to generate a random number. The seed value acts as a pseudo-random number generator, and if the seed value remains the same the computer will generate the same random number again and again.

When we generate a random number using random.randint() the random module use the computer seed value as a base for generating the random number.

The first seed value is determined by using the timestamp of the computer system, then the currently generated random number becomes the seed value for the next randomly generators values.

The Python random module provides the seed() function which allows us to set the seed value for the random number generator. By setting the seed value to a constant number we can generate the same random number and pick the same random item from a list or range.

What is random seed in Python

To generate a random number, Python’s random module uses a seed value, which is also known as the random number generator. The seed value is generally determined by the current timestamp(current system time) of the operating system.

The seed value act as a starting point or a base value to generate a random number or value.

Vamware

Although the value of seed is automatically set by the operating system itself we can also use the random.seed() function to set it to a constant value.

By setting it to a constant value we can generate the same random number again and again or pick the same random item from a list again and again.

Vamware

Before we learn how to use the random.seed() function let’s discuss why and when to use it?

When and why use the random.seed() in Python?

The seed value is very important when we want to generate random secure encrypted keys, there we just not only depend on the automatic seed value suggested by the operating system. We put our own custom seed value to initialize a secure and robust pseudo-random number generator.

Here comes the random.seed() function. This function allows us to set a custom seed value that generates a pseudo-random number generator which acts as a base value for generating a random number.

By setting a custom seed value we have a predictable source of a random number that is only known to us.

random.seed() syntax

import random 

random.seed(a=None, version=2)

The random seed() function can accept two argument values and both are optional.

Vamware

Arguments

a: It is the seed value. By default its value is None, so it uses the current system time of the operating system.

version: It is also an optional argument which default value is 2. In version 2 the specified seed str, bytes, and byte array objects get converted into an int.

Generate the same random number every time using random.seed()

By setting the random.seed() value to a constant number we can generate the same number every time.

Example

import random

#set the random seed to constant number 4
random.seed(4)

##generate a random number
print("random number 1:", random.randint(1,10000))

#set the random seed to constant number 4
random.seed(4)

##generate a random number
print("random number 2:", random.randint(1,10000))

Output

random number 1: 3868
random number 2: 3868

The seed number is automatically set to a different value after we perform any random generation of an operation.

So in order to generate the same random number we have to set the seed value to a constant before generating the random number every time.

If we call the randint() function twice before calling the seed() function we will not the same random number.

Example

import random

#set the random seed to constant number 4
random.seed(4)

##generate a random number
print("random number 1:", random.randint(1,10000))

##generate a random number
print("random number 2:", random.randint(1,10000))

Output

random number 1: 3868
random number 2: 4970

Here you can see that the random 2 is the completely random number this is because the seed value is set to something different for it.

Get a seed value used by a random generator

The Python does not store the seed value in the memory, it is automatically generated with every call of generating some random number. Python also does not provide any method or property to get the current seed value.

So in order to get the seed value, we have to save our custom seed value in a Python identifier, so we can reuse the seed value throughout the program.

For instance, we want to generate the same random result for in particular cases in our program, there we can simply call the seed function with custom seed_value before calling any random operation.

Example

import random

import sys

# generate a random seed number between 0 to max number
seed_value = random.randint(0, sys.maxsize)

# print the seed value
print("Your seed value is:", seed_value)

'''
now we can use the seed value anywhere
throughout the program
when we generate the same result
'''
#generate a random number between 100 and 999
#with the custom seed value
#set the seed value
random.seed(seed_value)

print("Random Number 1 (100, 999):",random.randint(100, 999))

random.seed(seed_value)

print("Random Number 2 (100, 999):",random.randint(100, 999))

Output

Random Number 1 (100, 999): 842
Random Number 2 (100, 999): 842

Common Examples of random.seed() function

Now you know how to use the Python seed() function, now let’s discuss some of the common use cases of random.seed() function.

Example 1: Use the random seed to randomly choose the same item from the list.

With the random choice() function we can choose a random item from a Python list. The random choice also uses the seed value to randomly pick a random item from the list. And by setting the seed() to a constant value before calling choice() function we can pick the same item.

import random

programming_languages = ['C','C++', 'Java', 'Python', 'JavaScript', 'Ruby', 'Kotlin']

#set the seed value to 50
random.seed(50)
print("Random Programming Language 1:", random.choice(programming_languages))

#again set the seed value to 50
random.seed(50)
print("Random Programming Language 2:", random.choice(programming_languages))

Output

Random Programming Language 1: Python
Random Programming Language 2: Python

Example 2: Use the random seed to randomly choose the same multiple items from the list.

The random sample() function allows us to randomly pick n number of items from the list. Similar to the random.choice() method the sample() method pick the same items if we set a custom seed value before calling the function.

import random

programming_languages = ['C','C++', 'Java', 'Python', 'JavaScript', 'Ruby', 'Kotlin']

#set the seed value to 50
random.seed(50)
print("Random 3 Programming Languages 1:", random.sample(programming_languages,3))

#again set the seed value to 50
random.seed(50)
print("Random 3 Programming Languages 2:", random.sample(programming_languages,3))

Output

Random 3 Programming Languages 1: ['Python', 'Java', 'Ruby']
Random 3 Programming Languages 2: ['Python', 'Java', 'Ruby']

Example 2: Use the random seed to randomly shuffle the list the same.

The random shuffle() function can randomly shuffle the items of a list. But by setting the seed value before shuffling the list, we can get the same shuffling result.

import random

programming_languages = ['C','C++', 'Java', 'Python', 'JavaScript', 'Ruby', 'Kotlin']

#set the seed value to 50
random.seed(50)
random.shuffle(programming_languages)
print("Random shuffle 1:",programming_languages )

'''
redefine the actual order of list
because the order has been shuffled
'''
programming_languages = ['C','C++', 'Java', 'Python', 'JavaScript', 'Ruby', 'Kotlin']

#again set the seed value to 50
random.seed(50)
random.shuffle(programming_languages)
print("Random shuffle 2:",programming_languages )

Output

Random shuffle 1: ['C', 'Kotlin', 'JavaScript', 'C++', 'Ruby', 'Java', 'Python']
Random shuffle 2: ['C', 'Kotlin', 'JavaScript', 'C++', 'Ruby', 'Java', 'Python']

Conclusion

To generate a random number computers use the seed value, which provides a start point or base to generate a random number. To determine the seed value the random module uses the default operating system time system and uses it as a seed value to generate a random number. The random module also provides the seed() method in case if the developer does not want to use the default systems and wants to generate a predictable and secure random number using a custom seed value.

People are also reading: 

Author: Vinay Singh

I am a Full Stack Developer with a Bachelor's Degree in Computer Science, who also loves to write technical articles that can help fellow developers.

Leave a Reply

Your email address will not be published.